PHP范围解析运算符问题

时间:2010-04-02 18:17:23

标签: php kohana scope

我遇到了MyClass::function();样式的调用方法,但无法找出原因。这是一个例子(我正在使用Kohana框架btw):

    class Test_Core
 {
  public $var1 = "lots of testing";

  public function output()
   {
    $print_out = $this->var1;
    echo $print_out;
   }
 }

我尝试使用以下命令来调用它,但它将$ var1作为undefined返回:

Test::output()

然而,这很好用:

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

我通常使用这种调用对象的方式而不是“新类”样式,但我无法弄清楚为什么它不想工作。

4 个答案:

答案 0 :(得分:4)

使用此:

Test::output()

您将方法称为静态方法 - 静态方法无法访问实例属性,因为没有实例。

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


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


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

  

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

并且:

  

静态调用非静态方法   生成E_STRICT级警告。

答案 1 :(得分:0)

静态调用vs实例调用。您将需要掌握这些基本的OOP概念。也读取了static关键字:

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

答案 2 :(得分:0)

静态调用时你不能使用$ this,因为$ this指的是在你的情况下没有创建的对象。

答案 3 :(得分:-1)

请尝试Test_Core::output(),因为您使用的是错误的班级名称