Подтвердить что ты не робот

PHP $эта переменная

Я читаю некоторый 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?

4b9b3361

Ответ 1

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

  • При назначении свойство тихо создается.
  • Чтение из несуществующего свойства генерирует уведомление, если включено E_STRICT.
  • Значение по умолчанию для любого свойства undefined: NULL

Ответ 2

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; 
  }

}

Ответ 3

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

Ответ 4

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

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

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

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

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

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

Ответ 5

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

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

Ответ 6

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

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