0

クラスを含めることに問題があります。問題を説明する簡単な例を次に示します。

クラス番号 1 (パス: /home/day/Class_A.php):

class Class_A {
  public function sayHi() {
    echo "Good day";
  }
}

クラス番号 2 (パス: /home/test/Class_B.php):

class Class_B {
  public function greeting() {
    if(class_exists("Class_A")!=true)
      include "../day/Class_A.php";
    $test = new Class_A();
    $test->sayHi();
  }
}

PHP ファイル (パス: /home/php.php)

if(class_exists("Class_B")!=true)
  include "test/Class_B.php";
  $g = new Class_B;
  $g->greeting();

問題は、php.php に Class_B が含まれ、Class_B に Class_A が含まれている場合、クラスのオブジェクトのパスが php.php ファイルと同じになるため、Class_B が Class_B を開くことができないことです。

私の質問は次のとおりです。これを回避するための適切で簡単な方法はありますか?

4

3 に答える 3

5

変更してみてください:

include "../day/Class_A.php";

include dirname(__FILE__) . '/../day/Class_A.php';

このように、インクルードは、インクルードを実行しているファイル (Class_B) に対して相対的になります。

于 2012-07-30T20:53:16.990 に答える
0

__autoloadを使用します。これは、定義した魔法の関数であり、クラスがロードされていないが、そのクラスをロードする必要がある場合にPHPが通知できるようにします。

If you define the __autoload function like so,
function __autoload ($classname)
{
    require('/path/to/my/classes/'.$classname.'.php');
}
you no longer need to add
require_once('/path/to/my/classes/MyClass.php');
into your files, because the first time that PHP encounters
$mine = new MyClass();
or
MyClass::staticMethodCall();
it will automatically call the __autoload function that you defined earlier.
__autoload('MyClass');

リソース: http: //blog.samshull.com/2010/02/why-you-should-use-autoload-function-in.html

于 2012-07-30T21:11:44.320 に答える
0

は静的関数ではないように見えるgreetingため、次のことはできません。

Class_B::greeting();

クラス B オブジェクトを取得し、それに対して greeting を呼び出すか、宣言に追加staticする必要があります。greetings

第二に、require_once を使用しないのはなぜですか? php.php で

require_once('test/ClassB.php');

ClassB.php では:

require_once('../day/ClassA.php');

于 2012-07-30T20:55:56.143 に答える