PHP作用域解析运算符问题

3

我在使用MyClass::function();的方式调用方法时遇到了问题,但无法弄清原因。以下是一个例子(顺便提一下,我正在使用Kohana框架):

    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();

我通常使用这种方式来调用对象,而不是使用“new Class”样式,但我不知道为什么它不起作用。

我不知道为什么大部分脚本没有显示在代码部分。预览时看起来很好。 - anthony
4个回答

4
使用此代码:

Test::output()

你将方法调用为静态方法 - 静态方法无法访问实例属性,因为没有实例。
如果你想使用属性,你必须实例化类以获取一个对象 - 并在该对象上调用方法。
以下是一些手册链接供参考:
- 类和对象部分 -- 你真的应该阅读这一节 ;-) - 属性 - 基础知识 - 静态关键字 - 对于这个特定的问题也很有趣 ;-)
引用我链接到的最后一页:
因为静态方法可以在对象实例化之前被调用,所以在声明为静态的方法中,伪变量 $this 不可用。
而且:
静态调用非静态方法会生成一个 E_STRICT 级别的警告。

0

0

在静态调用中不能使用 $this,因为 $this 指向的是未在您的情况下创建的对象。


-1
尝试使用 Test_Core::output(),因为您正在使用错误的类名。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接