Может ли кто-нибудь сказать разницу между mysqli->commit
и mysqli::commit
?
Заголовок на этой странице – mysqli::commit
, но в примерах они используют mysqli->commit
.
->
используется при обращении к члену объекта.
::
является оператором разрешения области действия и используется для обозначения статического члена класса.
Рассмотрим следующий класс:
class FooBar { public static function fizz() { echo "Fizz"; } public function buzz() { echo "Buzz"; } }
Вы вызовете функцию buzz()
используя ->
:
$myFooBar = new FooBar(); $myFooBar->buzz();
Но будет использовать ::
для вызова функции functon fizz 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()
, или вы могли бы вызвать commit static, указав MySQLi::commit()
:: обращается к функции класса, не создавая объекта.
в mysqli-> commit, mysqli – это экземпляр MySQLi в mysqli :: commit вызов статического метода
mysqli-> commit – это публичная функция, а mysqli :: commit – статическая функция, две из которых являются объектами PHP-класса класса mysqli.
обычно в документации php.net :: означает, что этот класс имеет этот метод. Для правильного использования вы должны следовать примеру, поэтому используйте -> sintax.
Оператор ->
предназначен для свойств объекта .
Оператор ::
для свойств класса .