ホームページ > バックエンド開発 > PHPチュートリアル > 継承におけるクラスの静的メソッドの使用がよくわかりません。self と this を変換するにはどうすればよいですか?

継承におけるクラスの静的メソッドの使用がよくわかりません。self と this を変換するにはどうすればよいですか?

WBOY
リリース: 2016-06-23 13:52:08
オリジナル
826 人が閲覧しました

<?phpclass A  //核心{	public $db;	public function __construct(){		$this->db=new B();		}	public function find(){		return  $this->db->b1();		}}class B  //数据库{	public function b1(){		return true;	}	public function b2(){		return false;	}}//**********分隔符***********class C extends A //第三方类{	 static function test(){		return self::find();		}}//当前文件if(C::test()){	echo 'OK';	}?>
ログイン後にコピー


このファイルの実行は間違っています、
コアと現在のファイル部分のみを変更できます、
現在のファイル部分のような短い記述方法が必要です、
$c=new は使いたくないですC()
if($c-> ;test()) この書き方?

上記のエラーの理由は、
静的メソッドが find を呼び出すと、
クラス A の find に $this オブジェクトがあり、エラーが報告されるためです
私のアイデアは実現できますか


への返信議論(解決策)

ルールには従わないけど不可能ではない
将来ルールが変わるかも?自分に足かせを付けるのはいつも無理です

class A  //核心{    private static $_Instance;    public $db;    public function __construct(){        $this->db=new B();       }    public function find(){        if(empty(self::$_Instance)) self::$_Instance = new self();        return  self::$_Instance->db->b1();       }}class B  //数据库{    public function b1(){        return true;    }    public function b2(){        return false;    }}//**********分隔符***********class C extends A //第三方类{   static function test(){     return self::find();      }}error_reporting(E_ALL ^ E_STRICT);//当前文件if(C::test()){    echo 'OK';   }
ログイン後にコピー
OK


司会者本当にすごいです、思い切って回収してください

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート