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 ?

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

  • При назначении свойство создается молча.
  • Чтение из несуществующего свойства генерирует уведомление, если включен E_STRICT .
  • Значение по умолчанию для любого неопределенного свойства равно 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

Он будет иметь значение по умолчанию, если назначено else "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; } }