Может ли кто-нибудь рассказать разницу между mysqli->commit
и mysqli::commit
?Разница между «->» и «::» в PHP MySQLi OOP
Заголовок в this page - mysqli::commit
, но в примерах они используют mysqli->commit
.
Может ли кто-нибудь рассказать разницу между mysqli->commit
и mysqli::commit
?Разница между «->» и «::» в PHP MySQLi OOP
Заголовок в this page - mysqli::commit
, но в примерах они используют mysqli->commit
.
->
используется при обращении к член объекта.
::
является Scope Resolution Operator и используется для обозначения статического члена класса.
Рассмотрим следующий класс:
class FooBar {
public static function fizz() {
echo "Fizz";
}
public function buzz() {
echo "Buzz";
}
}
Вы бы вызвать функцию buzz()
с помощью ->
:
$myFooBar = new FooBar();
$myFooBar->buzz();
Но будет использовать ::
назвать functon fizz()
, как это статический член (а член, который не требует экземпляра класса, который будет называться):
FooBar::fizz();
Кроме того, в то время как мы говорим о разнице между статическими членами против экземплярам членов, вы не можете использовать $this
для обозначения текущего экземпляра в статических членов. Вместо этого вы используете self
(нет ведущего $
), который относится к текущему классу, или parent
, если вы хотите обратиться к родительскому классу, или если у вас есть удовольствие работать с PHP 5.3.0, static
(что позволяет использовать позднюю статическую привязку).
документация использует ::
для обозначения функции внутри класса как имя класса в заголовке не является экземпляром класса. Тем не менее, используя тот же самый пример, запись документации со ссылкой на функции buzz()
будет использовать следующий заголовок:
FooBar::buzz
Но если в документации не указано, что это статический член, вам нужно будет использовать ->
на примере назвать:
$myFooBar = new FooBar();
$myFooBar->buzz();
:: обращается к функции класса, не создавая объект.
::
Используется для Статические методы.
->
используется для метода объекта, если у вас уже есть экземпляр.
Оператор ->
для Свойства объекта.
Оператор ::
для Свойства класса.
в mysqli-> фиксации, MySQLi является экземпляром MySQLi в MySQLi :: совершают вызвать статический метод
Если у вас есть экземпляр объекта, можно использовать -> для обозначения метода внутри этого экземпляр:
$foo = new Foo();
$foo->bar();
Использование :: вызывает статический метод без создания экземпляра объекта:
Foo::bar();
статический метод не может относиться к нему» текущий ток через $this
, но может ссылаться на себя (текущий класс), используя self
.
Вызов нестатического члена с использованием оператора разрешения области действия вызывает E_STRICT в PHP <5.3.0 и E_WARNING в PHP> = 5.3.0. –
И 'self' существует, чтобы ссылаться на текущий класс в статическом контексте. Он не относится к экземпляру, а к самому себе: 'class A {статическая функция b() {self :: c(); } частная статическая функция c() {echo 'hello'; }}; ' –
mysqli-> commit - это публичная функция, а mysqli :: commit - статическая функция, две из которых являются объектами PHP-класса класса mysqli.
обычно в документации php.net :: означает, что этот класс имеет этот метод. Для правильного использования вы должны следовать примеру, поэтому используйте -> sintax.
::
указывает статический (класс) метод, который может быть вызван без фактического создания объекта. ->
указывает метод экземпляра (объекта), для которого вам нужен экземпляр объекта, который можно использовать.
Так, например, если у вас есть переменная $m
, который был экземпляром класса mysqli
, вы могли бы назвать commit
говоря $m->commit()
, или вы могли бы назвать совершить статически говоря MySQLi::commit()
Собирался публиковать сообщения, но это довольно хорошо. Короче говоря, Джон не имеет никакой разницы. Поскольку Andrew описывает свое соглашение в руководстве PHP, чтобы описать метод класса как ClassName :: methodName Цель состоит в том, чтобы использовать как объект, то есть $ name-> commit(), если в документации не указано иначе. – simonrjones
Этот ответ потрясающий. как сделать FooBar :: fizz() -> select («something») -> где («что-то»); – TheCrazyProfessor