Может ли кто-нибудь сказать разницу между mysqli->commit
и mysqli::commit
?
Заголовок эта страница mysqli::commit
, но в примерах они используют mysqli->commit
.
Может ли кто-нибудь сказать разницу между 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()
, поскольку он является статическим членом (членом, который не требует экземпляра класса, который должен быть вызван):
FooBar::fizz();
Кроме того, хотя мы говорим о различии между статическими членами и созданными членами, вы не можете использовать $this
для ссылки на текущий экземпляр внутри static. Вместо этого вы используете 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- > commit, mysqli - это экземпляр MySQLi в mysqli:: commit вызов статического метода
mysqli- > commit - это публичная функция, а mysqli:: commit - статическая функция, две из которых являются объектно-ориентированными объектами класса mysqli.
обычно в документации php.net:: означает, что этот класс имеет этот метод. Для правильного использования вы должны следовать примеру, поэтому используйте → sintax.