php 未實例化類調用方法的問題


/**
 * 雙冒號操作符其意義應該是不實例化類而調用類中的方法或者成員等
 *
 */
class man1
{
    public function show()
    {
        echo "Hello World!";
    }
}
//由於show方法中沒有this,所以不出錯
man1::show();

class man2
{
    public static $a = 1;
    public function show()
    {
        self::$a;
        echo "Hello World!";
    }
}
//由於show方法中沒有this,所以不出錯
man2::show();

class man3
{
    public $a = 1;
    public static function show()
    {
        echo $this->a;
        echo "Hello World!";
    }
}
//這種是犯錯的,static 方法里面不可以用this
$p = new man3();
$p->show();

注意下面這種寫法:

class a
{
    public function show()
    {
        print_r($this);
        echo $this->str;
    }
}
class b
{
    public $str = "Hello World!";
    public function test()
    {
        a::show();
    }
}
/**
 *此處程序運行的結果是輸出”Hello World!”
 *因為$this是指向當前類實例化的一個對象,其作用范圍為當前對象的上下文
 *而此處A::show()中的$this其實是指向B類實例化的對象 ,而且正在對象上下文中,所以能夠輸出B中的變量$str的值
 */
$test = new B();
$test->test();

看這種寫法:

//自我感覺這個這種寫法太繞了,最好不要用
class man1{
    public function run()
    {
        print_r($this);//man2
        $this->say();//由於this為man2實例化的對象,故可以調用man2類中的say方法
        echo 'running';
    }
}

class man2 extends man1{
    public function say()
    {
        echo 'saying';        
    }
}

$p = new man2();
$p->run();

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM