В PHP переменной $this

Я читаю некоторый PHP-код, который я не мог понять:

class foo {
  function select($p1, $dbh=null) {
    if ( is_null($dbh) )
        $dbh = $this->dbh ; 
    return; 
  }

  function get() {
    return $this->dbh; 
  }
}

Я не могу найти $this->dbh ($dbh) объявление из класса. Мои вопросы:

  • каково значение $this->dbh ?

  • это локальная переменная для функции select()?

  • тут $this принадлежат class fooчлен данных? Почему нет декларации $dbh в этом классе?

6 ответов


PHP не строго требует объявления свойств класса.

  • на поручение свойство автоматически создается.
  • чтение несуществующее свойство генерирует уведомление, если Это.
  • значение по умолчанию для любого неопределенного имущества составляет NULL

PHP не является строгим для объявления. $this - >dbh является членом класса. Я сделал следующий код, чтобы понять концепцию:

class foo {

 function foo(){
     $this->dbh = "initial value"; 
 }

 function select($p1, $dbh=null) {
    if ( is_null($dbh) )
        $dbh = $this->dbh ; 
    return; 
 }

 function get() {
     return $this->dbh; 
 }

}

это то же, что:

class foo {
  var $dbh = "initial value"; 

  function select($p1, $dbh=null) {
    if ( is_null($dbh) )
       $dbh = $this->dbh ; 
    return; 
  }

  function get() {
     return $this->dbh; 
  }

}

  1. С кодом, который вы опубликовали, вы не можете знать, какие значения $this->dbh есть.
  2. $dbh свойство текущего объекта. $this используется для доступа к членам текущего объекта.
  3. поскольку эта переменная определена вне любой функции, это переменная, которая принадлежит классу, а не конкретной функции. Из-за этого, $this->dbh может использоваться в любой функции внутри класса.
  4. PHP не требует определения каждого переменная, которую вы используете.

PHP не заставляет вас объявлять свойства класса, но создаст их для вас при первом доступе. Хорошо это или плохо, как бы то ни было, добро пожаловать в PHP.

еще одна вещь, чтобы проверить, что у вас нет никакого наследования. Был твой $dbh свойства, определенные в родительском классе? В простом коде, который вы опубликовали, нет ничего, но я могу представить, что вы немного упростили для общественного потребления. :-)


каково значение $this - >dbh

Он будет иметь значение по умолчанию, если присвоено еще "null"

является ли это локальной переменной для функции select ()? Если это так, то почему функция get () может использовать эту переменную?

это свойство класса foo, а не локальной переменной, поэтому оно будет доступно для всех методов класса foo

принадлежит ли он члену данных класса foo? Если да, то почему там нет объявления для $dbh в этом классе?

Да, он принадлежит члену данных foo, вы не видите никакого объявления, потому что PHP не строго требует объявления свойств класса.


class foo {
  function select($p1, $dbh=null) {
    if ( is_null($dbh) )
        $this->dbh = $dbh ; 
    return; 
  }

  function get() {
    return $this->dbh; 
  }
}