使用后期静态绑定引用self的PHP语法

使用后期静态绑定引用self的PHP语法,php,inheritance,Php,Inheritance,当我学习PHP时,它几乎是以过程的形式出现,最近我一直在尝试适应OOP的工作方式。然而,我所关注的教程是在PHP5.3引入后期静态绑定之前产生的 我想知道的是,当从父类调用函数时,如何引用self 例如,这两个方法是为一个用户类编写的,该类是DatabaseObject的子类。现在它们位于用户类中,但是,由于它们在DatabaseObject的其他子类中使用,我想将它们提升为包含在DatabaseObject中 public static function find_all() {

当我学习PHP时,它几乎是以过程的形式出现,最近我一直在尝试适应OOP的工作方式。然而,我所关注的教程是在PHP5.3引入后期静态绑定之前产生的

我想知道的是,当从父类调用函数时,如何引用
self

例如,这两个方法是为一个用户类编写的,该类是DatabaseObject的子类。现在它们位于用户类中,但是,由于它们在DatabaseObject的其他子类中使用,我想将它们提升为包含在DatabaseObject中

public static function find_all()
  {
    global $database; 
    $result_set = self::find_by_sql("select * from ".self::$table_name);
    return $result_set;
  }
以及:

所以我有三个问题:

1) 当我将引用移动到父对象时,如何更改
self::
引用。它是
静态的::
还是类似的东西?
2) 当从我的代码调用函数时,我是否以同样的方式调用它,作为子类的函数,例如
User::find_all()
,或者是否也有更改?
3) 在我开始切碎碎片之前,还有什么我需要知道的吗

1) 当我将self::reference移动到父对象时,如何更改它。它是静态的还是类似的

它是静态的

2) 当从我的代码中调用函数时,我是否以同样的方式调用它,作为子类的函数,例如User::find_all(),或者是否也有更改

它是
User::find_all

3) 在我开始切碎碎片之前,还有什么我需要知道的吗

对。静态不是“面向对象的做事方式”。OOP是关于对象的,而不是关于类的。静态方法实际上是具有奇特语法的过程,并且与这些方法一样糟糕

1) 当我将self::reference移动到父对象时,如何更改它。它是静态的还是类似的

它是静态的

2) 当从我的代码中调用函数时,我是否以同样的方式调用它,作为子类的函数,例如User::find_all(),或者是否也有更改

它是
User::find_all

3) 在我开始切碎碎片之前,还有什么我需要知道的吗


对。静态不是“面向对象的做事方式”。OOP是关于对象的,而不是关于类的。静态方法实际上是具有奇特语法的过程,与这些方法一样糟糕。

要查找的其他相关位:


要查找的其他一些相关位:


(参考)(参考)我不记得说过静态是OOP的工作方式,我指的是作为一个整体的原则。静态是我想问的问题之一,我只是想添加一些背景知识。谢谢你的回答。我只是想澄清一下,我在函数调用中放了括号?我认为包含()对于任何函数来说都是标准的,不管是否传递参数?我不记得说过静态是OOP的工作方式,我指的是作为一个整体的原则。静态是我想问的问题之一,我只是想添加一些背景知识。谢谢你的回答。我只是想澄清一下,我在函数调用中放了括号?我认为包含()对于任何函数来说都是标准的,不管是否传递了参数?谢谢,get_called_class()似乎是不言自明的。不过,反思会让我阅读一段时间。谢谢,get_called_class()似乎不言自明。不过,反思会让我阅读一段时间。
protected function cleaned_attributes()
  {
    global $database; 
    $clean_attributes = array();
    foreach($this->attributes() as $key => $value) 
      {
        $clean_attributes[$key] = $database->escape_value($value);
      }
    return $clean_attributes;
  }