Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

-> используется при обращении к члену объекта.

:: является Оператором разрешения области и используется для обозначения статического члена класса.

Рассмотрим следующий класс:

class FooBar {
    public static function fizz() {
        echo "Fizz";
    }

    public function buzz() {
        echo "Buzz";
    }
}

Вы можете вызвать функцию buzz() с помощью ->:

$myFooBar = new FooBar();
$myFooBar->buzz();

Но использовал бы :: для вызова functon fizz(), поскольку он является статическим членом (членом, который не требует экземпляра класса, который должен быть вызван):

FooBar::fizz();

Кроме того, хотя мы говорим о различии между статическими членами и созданными членами, вы не можете использовать $this для ссылки на текущий экземпляр внутри static. Вместо этого вы используете self (без ведущего $), который относится к текущему классу, или parent, если вы хотите обратиться к родительскому классу или если у вас есть удовольствие работать с PHP 5.3.0, static (что позволяет использовать последнее статическое связывание).


В документации используется :: для ссылки на функцию внутри класса, поскольку имя класса в заголовке не является экземпляром класса. Тем не менее, используя тот же пример, запись в документации, относящаяся к функции buzz(), будет использовать следующий заголовок:

FooBar::buzz

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

$myFooBar = new FooBar();
$myFooBar->buzz();

Ответ 2

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

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

Ответ 3

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

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

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

Foo::bar();

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

в mysqli- > commit, mysqli - это экземпляр MySQLi в mysqli:: commit вызов статического метода

Ответ 8

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

Ответ 9

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