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