Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нюансы ООП. Разница между __CLASS__ и ::class 
:(
    Опции темы
PsiMagistr
Дата 23.1.2017, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: нет
Всего: 1



Ребята, у меня возник один нюанс, который не могу уразуметь... Волшебные константы.

Какова разница между  магическими константами __CLASS__ и ::class. Насколько я понимаю обе хранят полное имя класса с пространствами имен. http://php.net/manual/ru/language.oop5.bas...sic.class.class  




Вот некоторый код (рабочий) (PHP 7)

Код


abstract class Model{

       public static function findById($id){  
      
        $db = Db::getInstance();
        return $db->query('SELECT * FROM '.static::TABLE.' WHERE id = :id', static::class, [':id' => $id])[0];     
        
    }
}



Попытка замены static::class на static::__CLASS__ ведет к ошибке...


Доролнено на более простом коде:

Код

class A{
    public static function R(){
        echo static::class; //Работает.
    }
    
}


class B extends A{
    
}

B::R();


Работает...

Код

class A{
    public static function R(){
        echo static::__CLASS__; //Ошибка.
    }
    
}


class B extends A{
    
}

B::R();


Ошибка.

Это сообщение отредактировал(а) PsiMagistr - 23.1.2017, 15:06


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
Vardoulacha
Дата 23.1.2017, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 11.8.2005

Репутация: 7
Всего: 8



http://php.net/manual/ru/language.constants.predefined.php

Код

<?php
class A{
    public static function R(){
        echo '__CLASS__ != static::class<br>';
        echo __CLASS__ . ' != ' . static::class;
    }

}
class B extends A{

}
B::R();


__CLASS__ != static::class
A != B
PM MAIL   Вверх
PsiMagistr
Дата 23.1.2017, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: нет
Всего: 1



Цитата(Vardoulacha @ 23.1.2017,  15:14)
__CLASS__ != static::class
A != B

Спасибо большое.

Я уловил, что это не тождество. А можно ли вызвать __CLASS__ не у предка, а у наследника?

Это сообщение отредактировал(а) PsiMagistr - 23.1.2017, 15:47


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
Vardoulacha
Дата 23.1.2017, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 11.8.2005

Репутация: 7
Всего: 8



__CLASS__ для того и нужен чтобы получить имя ТОГО КЛАССА ГДЕ СТОИТ ЭТА СТРОКА
для всего остального есть ::class

MyClass::class
static::class
MySuperClass::class
PM MAIL   Вверх
PsiMagistr
Дата 23.1.2017, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: нет
Всего: 1



Цитата(Vardoulacha @ 23.1.2017,  15:53)
__CLASS__ для того и нужен чтобы получить имя ТОГО КЛАССА ГДЕ СТОИТ ЭТА СТРОКА
для всего остального есть ::class

MyClass::class
static::class
MySuperClass::class

Просто япортирую проект с PHP 7 на PHP 5.4. А у него нет константы class.


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
_zorn_
Дата 24.1.2017, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 21.8.2007

Репутация: 6
Всего: 12



Цитата(PsiMagistr @  23.1.2017,  23:07 Найти цитируемый пост)
Просто япортирую проект с PHP 7 на PHP 5.4. А у него нет константы class. 

Обычно наоборот... короче не завидуем тебе чувак. Сам разгребай.
Может проще подтянуть проект до современных стандартов ?
PM MAIL   Вверх
Fortop
Дата 24.1.2017, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(PsiMagistr @ 23.1.2017,  16:07)

Просто япортирую проект с PHP 7 на PHP 5.4. А у него нет константы class.

Не делай этого 


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
PsiMagistr
Дата 24.1.2017, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 479
Регистрация: 31.12.2009

Репутация: нет
Всего: 1



На современных стандартах все работает. Я ж не виноват, что хостер на php 5.4 гоняет. В поддержку написал - там руками развели.


--------------------
"Арфы нет? Возьмите бубен!

Ребята, будем жить!"

 (с) "В бой идут одни старики"

---

"ИЕ" - один из самых сумасшедших браузеров в нашей галактике.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1262 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.