2013-10-08 38 views
1

在PHP5中引入了static關鍵字,這使得人們得出PHP4不支持靜態方法或變量的結論。然而,當我在PHP 4.4.9上運行下面的代碼時,它在沒有被調用的構造函數的情況下工作。PHP4和靜態方法/回調函數

<?php 
class a { 
    function a() { 
     echo "CONSTRUCTOR CALLED\r\n"; 
    } 

    function b($var) { 
     return $var . 'x'; 
    } 
} 

print_r(array_map(array('a', 'b'), array('a', 'b'))); 

可以玩弄這個PHP代碼 「不甘示弱」:

http://sandbox.onlinephpfunctions.com/code/1d6882a8264620a0165d7345791f8680586a869e

任何想法,這是怎麼工作的?

+0

收拾,進一步這些代碼中有什麼與靜態函數有關?這只是一個簡單的類回調 –

+0

@MarkBaker這是一個奇怪的例子,但作爲回調的'array('a','b')'代表'a :: b',即一個靜態函數調用。 – IMSoP

+0

它調用類方法,但PHP4 OOP工作時不需要靜態關鍵字,因爲無論如何都可以靜態或動態地調用方法,並且由於b()不包含實例引用,所以不會有錯誤......它只是後續版本收緊規則 –

回答

3

所有的static關鍵字都是告訴PHP函數應該被靜態調用。實際上,即使是最新版本,也可以讓你靜態調用任何函數,如this online demo with your code in multiple PHP versions所示。

如果你turn error reporting to the max, as in this demo你會看到新版本的PHP給出了一個E_STRICT消息,你正在使用一個靜態函數,它沒有被聲明爲這樣,但是否則像以前一樣運行代碼。

所有需要做一個靜態函數調用::,這是當前和正確的PHP 4,這是真正的非靜態方法即是在PHP 5中5.3