Разница между "->" и "::" в PHP MySQLi ООП


Может ли кто-нибудь определить разницу между mysqli->commit и mysqli::commit?

Заголовок в этой странице равен mysqli::commit, но в примерах они используют mysqli->commit.

Author: nbro, 2009-08-07

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();
 68
Author: Andrew Moore, 2009-08-07 15:10:21

:: используется для статических методов.

-> используется для метода объекта, если у вас уже есть экземпляр.

 5
Author: easement, 2015-07-24 12:35:19

Если у вас есть экземпляр объекта, вы используете -> для ссылки на метод внутри этого экземпляра:

$foo = new Foo();
$foo->bar();

Использование::вызывает статический метод без необходимости создания экземпляра объекта:

Foo::bar();

Статический метод не может ссылаться на свой текущий экземпляр через $this, но может ссылаться на себя (текущий класс) с помощью self.

 4
Author: Joseph Mansfield, 2014-09-12 08:07:41

:: указывает статический метод (класс), который можно вызывать без фактического создания экземпляра объекта. -> указывает метод экземпляра (объекта), для использования которого вам необходим экземпляр объекта.

Так, например, если бы у вас была переменная $m, которая была экземпляром класса mysqli, вы бы вызвали commit, сказав $m->commit(), или вы могли бы вызвать фиксацию статически, сказав MySQLi::commit()

 1
Author: Daniel Vandersluis, 2009-08-07 14:44:34

::обращается к функции класса без создания экземпляра объекта.

 0
Author: Matt, 2009-08-07 14:41:56

В mysqli->фиксация mysqli является экземпляром MySQLi в mysqli::фиксация вызывает статический метод

 0
Author: andres descalzo, 2009-08-07 14:42:54

Mysqli->фиксация - это публичная функция, а mysqli::фиксация - статическая функция. Эти две функции являются обозначениями объектов php класса mysqli.

 0
Author: Houssem, 2009-08-07 14:43:28

Обычно в php.net документация::означает, что у этого класса есть этот метод. Для практического использования вы должны следовать примеру, поэтому используйте ->sintax.

 0
Author: mck89, 2009-08-07 14:44:21

Оператор -> предназначен для свойств объекта .

Оператор :: предназначен для свойств класса .

 0
Author: Gumbo, 2015-07-24 12:35:51