Разница между "->" и "::" в PHP MySQLi ООП
Может ли кто-нибудь определить разницу между mysqli->commit
и mysqli::commit
?
Заголовок в этой странице равен mysqli::commit
, но в примерах они используют mysqli->commit
.
9 answers
->
используется при ссылке на элемент объекта.
::
является оператором разрешения области и используется для ссылки на статический член класса.
Рассмотрим следующий класс:
class FooBar {
public static function fizz() {
echo "Fizz";
}
public function buzz() {
echo "Buzz";
}
}
Вы бы вызвали функцию buzz()
, используя ->
:
$myFooBar = new FooBar();
$myFooBar->buzz();
Но использовал бы ::
для вызова функции fizz()
, поскольку она является статическим членом (членом, для вызова которого не требуется экземпляр класса):
FooBar::fizz();
Также, в то время как мы говорим о разнице между статическими членами по сравнению с созданными экземплярами членами, вы не можете использовать $this
для ссылки на текущий экземпляр в статических членах. Вы используете self
вместо этого (без ведущего $
), который относится к текущему классу, или parent
если вы хотите обратиться к родительскому классу, или если вам доставляет удовольствие работать с PHP 5.3.0, static
( что допускает позднюю статическую привязку).
В документация использует ::
для ссылки на функцию внутри класса, поскольку имя класса в заголовке не является экземпляром класса. Все еще используя тот же пример, запись документации, ссылающаяся на функцию buzz()
, будет использовать следующий заголовок:
FooBar::buzz
Но если в документации не указано, что это статический элемент, вам нужно будет использовать ->
в экземпляре, чтобы вызвать его:
$myFooBar = new FooBar();
$myFooBar->buzz();
::
используется для статических методов.
->
используется для метода объекта, если у вас уже есть экземпляр.
Если у вас есть экземпляр объекта, вы используете -> для ссылки на метод внутри этого экземпляра:
$foo = new Foo();
$foo->bar();
Использование::вызывает статический метод без необходимости создания экземпляра объекта:
Foo::bar();
Статический метод не может ссылаться на свой текущий экземпляр через $this
, но может ссылаться на себя (текущий класс) с помощью self
.
::
указывает статический метод (класс), который можно вызывать без фактического создания экземпляра объекта. ->
указывает метод экземпляра (объекта), для использования которого вам необходим экземпляр объекта.
Так, например, если бы у вас была переменная $m
, которая была экземпляром класса mysqli
, вы бы вызвали commit
, сказав $m->commit()
, или вы могли бы вызвать фиксацию статически, сказав MySQLi::commit()
::обращается к функции класса без создания экземпляра объекта.
В mysqli->фиксация mysqli является экземпляром MySQLi в mysqli::фиксация вызывает статический метод
Mysqli->фиксация - это публичная функция, а mysqli::фиксация - статическая функция. Эти две функции являются обозначениями объектов php класса mysqli.
Обычно в php.net документация::означает, что у этого класса есть этот метод. Для практического использования вы должны следовать примеру, поэтому используйте ->sintax.
Оператор ->
предназначен для свойств объекта .
Оператор ::
предназначен для свойств класса .