Intereting Posts
Добавить количество связанных данных для каждого элемента в виде списка joomla MVC Как отредактировать мой код, чтобы он печатал все блоки строки JSON, а не только первый? PHP – хранилище таблиц Azure с более чем 1000 объектами Получение timestamp unix в миллисекундах в PHP5 и ActionScript3 Как правильно исправить ошибку времени выполнения phpMailer max? Laravel 5.1 МетодNotAllowedHttpException для метода хранилища с использованием Resource Controller Постоянная связь MySQL Проблемы с отображением загруженных изображений в Symfony 2 Как автоматически перенаправить пользователя в Symfony после таймаута сеанса? Как получить значение переменной jQuery в файле PHP Does ReflectionClass :: getProperties () также получает свойства родителя? Как я могу использовать класс APP CakePHP для загрузки XML-файлов из URL-адреса? Список изображений (01.png) и описания (01.txt) из каталога Класс Комментарий не найден Laravel 4 Неопределенный метод для mock-объекта, реализующего данный интерфейс в PHPUnit?

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

Может ли кто-нибудь сказать разницу между 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 fizz() , поскольку это статический член (член, который не требует экземпляра класса, который должен быть вызван):

 FooBar::fizz(); 

Кроме того, хотя мы говорим о различии между статическими членами и экземплярами- членами, вы не можете использовать $this чтобы ссылаться на текущий экземпляр внутри статических членов. Вместо этого вы используете 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() , или вы могли бы вызвать commit static, указав MySQLi::commit()

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

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

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

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

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

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