代码之家  ›  专栏  ›  技术社区  ›  anthony

php范围解析运算符问题

  •  3
  • anthony  · 技术社区  · 15 年前

    我有麻烦了 MyClass::function(); 调用方法的样式,无法找出原因。下面是一个例子(我使用的是kohana framework btw):

        class Test_Core
     {
      public $var1 = "lots of testing";
    
      public function output()
       {
        $print_out = $this->var1;
        echo $print_out;
       }
     }
    

    我尝试使用以下方法调用它,但它返回$var1作为未定义:

    Test::output()
    

    不过,这样做很好:

      $test = new Test(); 
      $test->output();
    

    我通常使用这种调用对象的样式,而不是“新类”样式,但是我不明白为什么它不想工作。

    4 回复  |  直到 8 年前
        1
  •  4
  •   Pascal MARTIN    15 年前

    使用此:

    Test::output()
    

    您将作为静态方法调用您的方法——静态方法不能访问实例属性,因为没有实例。

    如果要使用属性,则必须实例化类以获取对象,并调用该对象上的方法。


    手册的几个链接,作为参考:


    引用我链接到的最后一页:

    因为静态方法是可调用的 没有对象的实例 创建,伪变量 $this 方法内部不可用 声明为静态。

    还有:

    静态调用非静态方法 生成一个 E_STRICT 水平警告。

        2
  •  0
  •   webbiedave    15 年前

    静态调用vs实例调用。您需要掌握这些基本的oop概念。同时阅读静态关键字:

    http://www.php.net/manual/en/language.oop5.static.php

        3
  •  0
  •   Davinder Kumar    8 年前

    静态调用时不能使用$this,因为$this引用的对象不是在您的案例中创建的。

        4
  •  -1
  •   Mariusz Jamro    10 年前

    尝试 Test_Core::output() 因为你用错类名了