以正确的方式从Object调用PHP方法

时间:2013-11-27 14:46:46

标签: php oop object methods

我还在学习OOP PHP,并且我继续在以下方法中调用方法中的方法之间进行交换和更改

$obj = new Model();
$obj->method($param);

针对

Model::method($params);

我理解我在方法中的区别,因为我可以在第一个例子中使用$ this,并且我必须在第二个中使用self ::。

哪种方法正确,使用各种方式的原因是什么

我问的原因是我找不到合适的搜索词进行研究。我目前正在阅读一本关于OOP的书,它可能会在某个时候讲出来,但现在知道的很好。

4 个答案:

答案 0 :(得分:2)

Foo::bar()调用静态类方法,而$foo->bar()调用对象上的实例方法。这是两件完全不同的事情。您不需要对象实例来调用Foo::bar(),实际上,在执行此操作时您无权访问实例数据。除了函数附加到类之外,Foo::bar()基本上只是像bar()这样的常规函数​​调用。

实例方法作用于特定的对象实例

class User {

    protected $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public function getName() {
        return $this->name;
    }

    public static function hi() {
        // no access to $this->name here, since static
        // methods are not bound to specific instances
        echo 'Hi';
    }

}

$dave = new User('Dave');
$mary = new User('Mary');

echo $dave->getName();  // Dave
echo $mary->getName();  // Mary

User::hi(); // Hi

除非你理解 this ,否则你对OOP一无所知。

答案 1 :(得分:1)

第一个例子是对方法的非静态调用,第二个是静态调用 如果您想要访问Model的私有变量,第一个更好,如果您使用像普通函数这样的方法,则第二个更好。
通常,您应该将第一种类型的方法声明为static(public static function method(){})。

答案 2 :(得分:0)

第一种情况是在类实例上调用方法,第二种情况是调用静态方法。

请参阅http://php.net/manual/en/language.oop5.static.php

答案 3 :(得分:0)

没有“正确”的方式,因为两种呼叫类型都有不同的用途。

第一个调用类型是处理对象的标准方法:初始化类的具体实例。此实例可以有自己的内部值,当您使用相同的参数调用方法时,每个实例都可以使用这些值来创建不同的结果。

第二个调用类型称为static,直接在类上运行,没有实例(因此没有$this)。有一些用例,请参阅this answer for Java,它与PHP相同。