2013-08-23 7 views
6

としてproperty_existsに入れたとき、私は次のように代わりにpropery_exists関数の内部クラス名を入力するのselfを使用しようとしている:お知らせ:未定義の定数自己の使用 - 「自己」と想定、最初の引数

private static function instantiate($record){ 
    $user = new self; 
    foreach($record as $name => $value){ 
     if(isset($user->$name) || property_exists(self, $name)){ 
      $user->$name = $value; 
     } 
    } 
    return $user; 
} 

0123ライン36に /var/www/photo_gallery/includes/User.phpで想定している「自己」 - 未定義の定数自己の使用:

注意:私はこのスクリプトを実行したときしかし、それはエラーを取得します

行36は、property_existsメソッドが呼び出された行です。

自分がUser(クラス名)に変更されたとき。それは完全に動作します。

selfがこのような通知をしている理由を知りたいのですが? selfはクラスを参照していませんか?

答えて

3

selfを使用すると、現在のクラスを参照できます。 クラス名なし

は魔法の定数を使用してみてください:

if(isset($user->$name) || property_exists(__CLASS__, $name)){ 

PHPマニュアルから:__CLASS__

クラス名。 (PHP 4.3.0で追加されました)PHP 5以降、この定数は宣言されたクラス名を返します(大文字小文字を区別します)。 PHP 4では、その値は常に小文字になります。クラス名には、宣言された名前空間が含まれます(Foo \ Barなど)。 PHP 5.4ののように、クラスも特性で動作することに注意してください。形質方法で使用される場合、CLASSは形質がで使用されるクラスの名前である

PHP Manual

例:

class Test { 
    public function __construct(){ 
     echo __CLASS__; 
    } 
} 

$test = new Test(); 

出力:

Test 
+0

非常に良い。ありがとうVahid。 –

関連する問題