不同點有: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教學》
以上是php類別的靜態呼叫和實例化呼叫有哪些不同點?的詳細內容。更多資訊請關注PHP中文網其他相關文章!