ホームページ  >  記事  >  バックエンド開発  >  継承におけるクラスの静的メソッドの使用、selfとthisの変換方法がよくわかりません

継承におけるクラスの静的メソッドの使用、selfとthisの変換方法がよくわかりません

WBOY
WBOYオリジナル
2016-06-13 12:04:141123ブラウズ

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

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


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

上記のエラーの理由は、
静的メソッドが find を呼び出すと、
クラス A の find に $this オブジェクトがあり、エラーが報告されるためです。
私の考えはできますか?
-----解決策---------
ルールには従わないけど、不可能ではありません
もしかしたら今後ルールが変わるかも?自分に足かせを付けるのは意味がありません
class A  //核心<br />{<br />    private static $_Instance;<br />    public $db;<br />    public function __construct(){<br />        $this->db=new B();   <br />    }<br />    public function find(){<br />        if(empty(self::$_Instance)) self::$_Instance = new self();<br />        return  self::$_Instance->db->b1();   <br />    }<br />}<br />class B  //数据库<br />{<br />    public function b1(){<br />        return true;<br />    }<br />    public function b2(){<br />        return false;<br />    }<br />}<br />//**********分隔符***********<br />class C extends A //第三方类<br />{<br />   static function test(){<br />     return self::find();   <br />   }<br />}<br /><br />error_reporting(E_ALL ^ E_STRICT);<br /><br />//当前文件<br />if(C::test()){<br />    echo 'OK';   <br />}
OK

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。