【问题标题】:php static functionphp静态函数
【发布时间】:2010-10-28 12:34:04
【问题描述】:

我有一个关于 php 中的静态函数的问题。

假设我有一堂课

class test {
    public function sayHi() {
        echo 'hi';
    }
}

如果我使用test::sayHi();,它可以正常工作。

class test {
    public static function sayHi() {
        echo 'hi';
    }
}

test::sayHi(); 也可以。

一等舱和二等舱有什么区别?

静态函数有什么特别之处?

【问题讨论】:

  • 从php7开始你不能静态调用非静态方法

标签: php class static member


【解决方案1】:

在第一个类中,sayHi() 实际上是一个实例方法,您将其作为静态方法调用,但您可以不使用它,因为sayHi() 从不引用$this

静态函数与类相关联,而不是与类的实例相关联。因此,$this 在静态上下文中不可用($this 未指向任何对象)。

【讨论】:

  • 现在静态调用非静态方法有效,但已弃用。对实例方法使用此语法时要小心!
  • 这就是为什么他们说它是静态函数?因为没有多实例具有动态数据流和动态输出。请指导我。@chaos
【解决方案2】:

简单地说,静态函数的功能独立于它们所属的类。

$this 表示,这是这个类的一个对象。它不适用于静态函数。

class test {
    public function sayHi($hi = "Hi") {
        $this->hi = $hi;
        return $this->hi;
    }
}
class test1 {
    public static function sayHi($hi) {
        $hi = "Hi";
        return $hi;
    }
}

//  Test
$mytest = new test();
print $mytest->sayHi('hello');  // returns 'hello'
print test1::sayHi('hello');    //  returns 'Hi'

【讨论】:

  • 好吧,我不是 PHP 向导,但传递给静态函数的变量 ('hello') 不是显式地被 'Hi' 覆盖吗?这意味着行 print test1::sayHi('hello');不会返回“hello”,但会返回“hi”?
  • 不是一个很好的例子。 $hi = '嗨';覆盖给定的参数,与静态声明无关。我会解决这个问题: self::$hi = $hi;它会像非静态的一样工作。您可以使用 self:: 而不是 $this-> 访问类变量
【解决方案3】:

完全不同的是,您不会在静态函数中获得$this。如果你尝试使用$this,你会得到一个Fatal error: Using $this when not in object context

好吧,还有一个区别:E_STRICT 警告由您的第一个示例生成。

【讨论】:

  • 我第一次使用时没有警告,我在 php7 中
  • 为什么我们在静态函数中没有 $this?这是什么架构逻辑?谢谢。
  • @LucasBustamante: $this 指的是当前对象。在静态函数中,没有当前对象;该函数存在于类中,不需要或引用该类的对象实例。
【解决方案4】:

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

【讨论】:

    【解决方案5】:

    简而言之,在第二种情况下,您没有 $this 对象,如 静态方法是类的函数/方法,而不是对象实例。

    【讨论】:

    • 是静态的,你如何定义类函数?没有其他花哨的生意?所以你是说如果它被称为“class_method”而不是“static”,它会更语义化?
    【解决方案6】:

    在尝试了示例(PHP 5.3.5)之后,我发现在定义函数的两种情况下,您都不能使用$this 运算符来处理类函数。所以我还找不到它们的区别。 :(

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      • 2014-12-28
      • 2014-04-27
      • 1970-01-01
      • 2012-11-23
      相关资源
      最近更新 更多