class Test
{
function __construct(){
# code...
}
public static function read(){
echo 'hello';
}
}
$a = new Test();
$a::read(); // it shows "hello" ??
die();
在类的实例上调用静态方法是否正常?我怎么能阻止它?
答案 0 :(得分:1)
$a::read()
只是编写Test::read();
的另一种方式,它调用类上的静态方法,而不是实例上的静态方法。你不必担心有人使用这种不同的写作方式,因为它做同样的事情。
顺便说一下,许多语言允许这样做。即使不推荐。例如,在Java中,您可以执行以下操作:
public class Main {
public static void main(String[] args) {
Main m = new Main();
m.test(); // Static member accessed via instance reference
Main.test();
}
public static void test() { }
}
它会做同样的事情。