2009-08-07 4 views

ответ

68

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

:: является 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(); 
+5

Собирался публиковать сообщения, но это довольно хорошо. Короче говоря, Джон не имеет никакой разницы. Поскольку Andrew описывает свое соглашение в руководстве PHP, чтобы описать метод класса как ClassName :: methodName Цель состоит в том, чтобы использовать как объект, то есть $ name-> commit(), если в документации не указано иначе. – simonrjones

+0

Этот ответ потрясающий. как сделать FooBar :: fizz() -> select («something») -> где («что-то»); – TheCrazyProfessor

0

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

5

:: Используется для Статические методы.

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

0

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

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

0

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

4

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

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

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

Foo::bar(); 

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

+0

Вызов нестатического члена с использованием оператора разрешения области действия вызывает E_STRICT в PHP <5.3.0 и E_WARNING в PHP> = 5.3.0. –

+1

И 'self' существует, чтобы ссылаться на текущий класс в статическом контексте. Он не относится к экземпляру, а к самому себе: 'class A {статическая функция b() {self :: c(); } частная статическая функция c() {echo 'hello'; }}; ' –

0

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

0

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

1

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

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