【问题标题】:Call setter and getter from static method从静态方法调用 setter 和 getter
【发布时间】:2015-04-17 11:58:55
【问题描述】:

我目前对静态和 setters/Getters ins php 有点困惑。

我的代码如下:

class Test{

private static $name;

   public static function setName( $value ){
     self::$name = $value //Works fine
    }

   public static function getName(){
     return self::$name;
   }

   function something(){
       self:: setName('nameOne');
   }

   public static function dostuff(){
       $test = self::getName(); //var_dump returns NULL
   }
}

如何在函数dostuff 中获取$name 的值,它必须是静态的?

【问题讨论】:

  • 有什么问题?
  • 您的函数something() 无效。你不能使用$this->setName(),你应该使用self::SetName()。要让您在 dostuff() 中获得价值,只需将其称为 $myname = self::$name
  • 您可以使用self 来引用类属性。因此,在您的情况下,它将是:self::name。你也不能在静态上下文中$this
  • 老实说,您似乎并不真正了解static 的作用。为什么这些方法需要是静态的?!
  • 函数必须是静态的,因为它是这样给出的。如上所示,我更新了代码,但我仍然无法获取我存储的值。

标签: php class static


【解决方案1】:

您可以通过self::getName() 访问它。
顺便说一句,something 方法看起来不对,应该是 self::setName('test') 而不是 $this->setName('test')

编辑:你如何调用你的方法?
something() 不是静态的,所以你必须用它创建一个对象,然后静态调用dostuff()
另外,您的something() 方法必须是public,否则它不会成为课程的一部分!
试试这个:

$myTest = new Test();
$myTest->something();
Test::dostuff();

这段代码对我来说很好用:

<?php
class Test{

    private static $name;

   public static function setName( $value ){
     self::$name = $value; //Works fine
    }

   public static function getName(){
     return self::$name;
   }

   public function something(){
       self::setName('nameOne');
   }

   public static function dostuff(){
       $test = self::getName(); //var_dump returns NULL
       echo $test."\n";
   }
}

$myTest = new Test();
$myTest->something();
Test::dostuff();
?>

【讨论】:

  • 嗨!谢谢你的回答,但我不能让它工作。上面的代码实际上是用于我正在开发的一个 wordpress 插件。所以类 Test 在设置时被调用。 setName() 在特定钩子上被调用,其中变量 $name 填充了内容,并且应该可用于不同的函数:问题是函数 something() 也在特定钩子上调用,这意味着我不能使用 Test::dostuff()。此外,唯一必须是静态的函数是 dostuff(),因为钩子需要它。我没有想法,谁能帮忙?
  • 有点难以理解...您可以编辑您的问题以使其清楚(您可以在其中添加换行符和代码标签。难以理解的是您的事件的时间线。你能请试着解释一下?我也不明白为什么你不能调用 Test::dostuff()... 它应该可以在任何地方调用,即使另一段代码使用类 Test 的对象。 ..
【解决方案2】:

您只需使用self 访问它:

   public static function dostuff(){
      return "<p>Hello!, My name is:" . self::$name . "</p>"; 
   }

我建议删除:

   function something(){
      $this-> setName( 'test' );
   }

由于方法 setName 是静态的,所以不能通过类的实例访问它。

【讨论】:

    猜你喜欢
    • 2014-09-24
    • 2015-03-21
    • 1970-01-01
    • 2011-04-14
    • 2017-09-09
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多