阻止从实例对象调用静态方法

时间:2016-12-30 12:39:41

标签: php

class Test
    {

        function __construct(){
            # code...
        }

        public static function read(){
            echo 'hello';
        }
    }

$a = new Test();

$a::read(); // it shows "hello" ??

die();

在类的实例上调用静态方法是否正常?我怎么能阻止它?

1 个答案:

答案 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() { }
}

它会做同样的事情。