Я читаю некоторый 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; } }
$this->dbh
. $dbh
– свойство текущего объекта. $this
используется для доступа к членам текущего объекта. $this->dbh
может использоваться в любой функции внутри класса. 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; } }