【问题标题】:PHP Scope Resolution Operator QuestionPHP 范围解析运算符问题
【发布时间】:2010-04-02 18:17:23
【问题描述】:

我在使用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();

我通常使用这种调用对象的风格,而不是“新类”风格,但我不知道为什么它不想工作。

【问题讨论】:

  • 我不知道为什么,但大部分脚本没有出现在代码部分。当我预览它时,它看起来很好。

标签: php kohana scope


【解决方案1】:

使用这个:

Test::output()

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

如果你想使用一个属性,你必须实例化类,以获取一个对象——然后调用那个对象的方法。


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


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

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

还有:

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

【讨论】:

    【解决方案2】:

    静态调用与实例调用。您需要掌握这些基本的 OOP 概念。阅读一下 static 关键字:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        试试Test_Core::output(),因为你使用了错误的类名

        【讨论】:

          猜你喜欢
          • 2012-04-20
          • 2010-09-09
          • 1970-01-01
          • 2014-10-05
          • 2015-12-18
          • 2014-01-24
          • 2011-11-04
          • 1970-01-01
          • 2011-06-11
          相关资源
          最近更新 更多