代码之家  ›  专栏  ›  技术社区  ›  Gufran Hasan

是否能够使用箭头运算符->通过对象访问静态属性?[副本]

  •  -1
  • Gufran Hasan  · 技术社区  · 6 年前

    正如我读到的 Static properties cannot be accessed through the object using the arrow operator ->. 静态属性可以使用resolution运算符通过类名访问。

    在下面的示例中,我可以使用 arrow operator -> 是的。

    class Foo {
       public static $name="I am php";
        public static function aStaticMethod() {
            // ...
            echo 'In Static method';
        }
    }
    
    Foo::aStaticMethod();//output: In Static method    
    $obj = new Foo;   
    $obj->aStaticMethod();//output: In Static method
    $obj->name;
    

    输出:

    In Static methodIn Static method
    

    但是当试图通过 operator -> 它给出以下错误:

    PHP Notice:  Accessing static property Foo::$name as non static in /home/jdoodle.php on line 14
    PHP Notice:  Undefined property: Foo::$name in /home/jdoodle.php on line 14
    

    php真的支持oops吗?你说的是什么? Static properties cannot be accessed through the object using the arrow operator -> 是吗?

    谢谢

    2 回复  |  直到 6 年前
        1
  •  2
  •   Gufran Hasan    6 年前

    问题是由于对什么是财产的误解, a property is a variable defined in a class 是的。如果展开上面的示例并添加属性…

    <?php
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    
    class Foo {
        public static $a = "static property";
    
        public static function aStaticMethod() {
            // ...
            echo 'In Static method';
        }
    }
    
    Foo::aStaticMethod();//output: In Static method
    echo Foo::$a;
    $obj = new Foo;
    $obj->aStaticMethod();//output: In Static method
    echo $obj->a;
    

    这试图引用 $a ,但输出是…

    In Static methodstatic propertyIn Static methodPHP Notice:  Accessing static property Foo::$a as non static in /home/nigel/workspace2/Test/t2.php on line 18
    PHP Stack trace:
    PHP   1. {main}() /home/nigel/workspace2/Test/t2.php:0
    PHP Notice:  Undefined property: Foo::$a in /home/nigel/workspace2/Test/t2.php on line 18
    PHP Stack trace:
    PHP   1. {main}() /home/nigel/workspace2/Test/t2.php:0
    
    Notice: Accessing static property Foo::$a as non-static in /home/nigel/workspace2/Test/t2.php on line 18
    
    Call Stack:
        0.0001     348024   1. {main}() /home/nigel/workspace2/Test/t2.php:0
    
    
    Notice: Undefined property: Foo::$a in /home/nigel/workspace2/Test/t2.php on line 18
    
    Call Stack:
        0.0001     348024   1. {main}() /home/nigel/workspace2/Test/t2.php:0
    

    (请注意,我已将其设置为报告所有错误/警告等。)

        2
  •  0
  •   dpattayath    6 年前

    根据php文档:

    “将类属性或方法声明为静态的使它们可以访问,而不需要类的实例化。声明为静态的属性不能与实例化的类对象一起访问(尽管静态方法可以)。”

    Example from PHP doc