PHP中的方法调用

时间:2013-11-08 10:46:14

标签: php

我有TestClass和一个公共方法。 我可以使用:: operator之类的静态方法和使用对象来调用相同的方法。 如果我们能够在不创建同一类的对象的情况下调用公共函数,那么PHP中的静态函数有什么优点或用途?

<?php

class TestClass { 
    public function testMethod() { 
      echo 'Method called';
    }
}

TestClass::testMethod();

$classObj = new TestClass(); 
$classObj->testMethod();

?>

4 个答案:

答案 0 :(得分:6)

在这种情况下,没有区别。

但是,static函数的意思是说某些函数不需要类的实例才能执行。即使它们没有标记为静态,也可以静态调用函数,但这样做在技术上是不正确的。如果您设置了error_reporting(E_ALL),则会给您一个严格的标准错误。

这不是因为代码不会工作,而是因为它可能不会

class TestClass {
    private $name = 'Rakesh';
    public function doSomething() {
        echo "Hi there";
    }
    public function doSomethingElse() {
        echo "Hi there " . $this->name;
    }
}

你可以静态调用第一个函数,它可以正常工作。但是,如果您静态调用doSomethingElse,它将无效,因为它会尝试访问$this,这只有在您拥有对象时才有效。

因此我们将static关键字应用于doSomething以允许(a)PHP和(b)使用该类的程序员知道可以静态调用它。这是一个可行的承诺。

假设应该是,如果它没有标记为static,则不应该静态调用它。

PHP的严格标准错误旨在使您的代码更好,即使它已经有效。 the E_STRICT constant的文档说:

  

允许PHP建议对代码进行更改,以确保代码的最佳互操作性和向前兼容性。

答案 1 :(得分:4)

在低级术语中,PHP中的静态函数与成员函数没有太大区别。唯一真正的区别是$this没有提供给静态函数。

这意味着使用static关键字主要是语义上的好处,因为它可以帮助您定义类的体系结构和预期行为。

话虽如此,你不应该滥用语义。 PHP可以(可选)警告你这些错误,你应该始终注意这些警告。语言规范是有原因的,它设计为以某种方式工作。如果您错误地使用static(或任何其他语言功能),则可能无法始终按预期工作。未来的PHP更新或配置更改可能会意外破坏您的代码。

答案 2 :(得分:1)

将类属性或方法声明为静态使它们可以访问,而无需实例化类。声明为static的属性无法使用实例化的类对象访问(尽管静态方法可以)。

为了与PHP 4兼容,如果没有使用可见性声明,则属性或方法将被视为声明为public。 优点是......

1&gt;哈希内存不会创建,因此没有内存浪费(没有内存泄漏问题)

2 - ;

// This makes little sense
Math m = new Math();
int answer = m.sin(45);

// This would make more sense
int answer = Math.sin(45);

答案 3 :(得分:0)

这就像一个短片,一个更多的PHP功能。但是,要访问它们的属性,必须将它们声明为常量。例如:

<?php
class Math{
       const pi=3.1416; 
}
echo Math::pi;
?>