首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >php静态函数

php静态函数
EN

Stack Overflow用户
提问于 2009-05-24 02:11:18
回答 6查看 119.1K关注 0票数 110

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

假设我有一个类

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

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

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

test::sayHi();也能正常工作。

一等舱和二等舱有什么不同?

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-05-24 02:20:03

在第一个类中,sayHi()实际上是一个实例方法,您将其作为静态方法调用,但由于sayHi()从未引用过$this,因此您可以轻松地使用它。

静态函数与类相关联,而不是类的实例。因此,$this不能从静态上下文中获得($this没有指向任何对象)。

票数 157
EN

Stack Overflow用户

发布于 2013-08-27 23:36:06

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

$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'
票数 22
EN

Stack Overflow用户

发布于 2009-05-24 02:15:03

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

好的,还有一个不同之处:您的第一个示例生成了一个E_STRICT警告。

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/902909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档