不同點有:1、靜態方法在程式開始時生成記憶體,實體方法在程式執行中生成記憶體;2、靜態方法可以直接呼叫,實體方法要先成生範例,通過範例呼叫方法;3、靜態的記憶體是連續的,範例申請的是離散的空間,所以沒有靜態方法快,靜態記憶體是有限制的。
靜態方法只有一個,無論你呼叫多少次,都是共用的,是沒有物件的概念,因此不能在靜態方法裡面使用$this呼叫,如果非得呼叫的話,只能範例化自身類
範例化不一樣,每一個範例化是一個物件,擁有多個。
下面用一個範例來了解一下
<?php Error_reporting(E_ALL|E_STRICT); class A{ public function bar(){ echo 'bar'.PHP_EOL; } public static function foo(){ echo 'foo'.PHP_EOL; } } A::bar();//會報錯 A::foo();//正確 $obj = new A(); $obj -> foo();//正確 /* bar()是一個非靜態方法,應該由物件來呼叫,但用靜態來呼叫此方法也可以執行,而嚴格狀態下,此方法會執行,同時報錯, Strict Standards: Non-static method Human::easyeat() should not be called statically in........ 但是範例化的類是可以呼叫靜態方法的。 */
<?php class A{ public $name = 'kangbazi'; public function bar(){ echo 'bar'.PHP_EOL; } public static function foo(){ echo self::$name.PHP_EOL;//報錯 } } A::foo(); /* 靜態方法不能呼叫非靜態屬性 。不能使用self::呼叫非靜態屬性。 */
做一個小總結:
最大的區別在於記憶體。
靜態方法在程式開始時生成記憶體,實體方法在程式執行中生成記憶體,
所以靜態方法可以直接呼叫,實體方法要先成生範例,通過範例呼叫方法,靜態速度很快,但是多了會佔記憶體。
任何語言都是對記憶體和磁碟的操作,至於是否物件導向,只是軟體層的問題,底層都是一樣的,只是實現方法不同。
靜態記憶體是連續的,因為是在程式開始時就生成了,而範例申請的是離散的空間,所以當然沒有靜態方法快,
而且靜態記憶體是有限制的,太多了程式會啟動不了。
以上就是php類的靜態呼叫和範例化呼叫有哪些不同點?的詳細內容,更多請關注TW511.COM其它相關文章!