Может ли кто-нибудь сказать разницу между 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.
Оператор -> предназначен для свойств объекта .
Оператор :: для свойств класса .