Помощь Узнать имя переменной

Статус
Закрыто для дальнейших ответов.

Den1xxx

Разрушитель (V)
Сообщения
126
Симпатии
69
Баллы
1 016
Здравствуйте.
Вот у меня к примеру есть код:
PHP:
$a = new b();
class b
{
    function __construct()
    {
        return true;
    }
}
Имеется ли какая-то возможность узнать внутри класса b(), какой переменной он присвоен в данный момент?
В данном примере класс b() инициализирован через $a, есть ли возможность вернуть название переменной, например, через метод __construct()?
 
я даже не знаю в каком случае это может понадобиться.
если уж прям так нужно - передавай в конструктор имя переменной, что бы там хранилось.

PHP:
$a = new b('a');
class b
{
    private $var;
    function __construct($var)
    {
        $this->var = $var
        return true;
    }
    
    /*Получаем имя переменной*/
    public function getVar(){
        return $this->var;
    }
    
}
 
я даже не знаю в каком случае это может понадобиться.
Я проектирую общий класс для публикаций. То есть статьи, форум, каталог товаров, фотогалерея, статические страницы и прочая прочая будут работать через этот класс. При создании модуля хочется писать $articles=new publications(); а не $articles=new publications('articles'); Вот так мне лень, да.
Именно хочу магическим образом подхватывать название из переменной. И потом уже в зависимости от её названия — загружать конфиги, подключать MySQL таблицы, загружать шаблоны путем автозагрузки внутри родительского класса.
 
это все понятно. покажи мне кусок кода в котором тебе может понадобиться имя текущей переменной? мне кажется ты где-то с логикой не там.
 
это все понятно. покажи мне кусок кода в котором тебе может понадобиться имя текущей переменной? мне кажется ты где-то с логикой не там.
Не выспался что ли? Я же уже всё описал в предыдущем ответе.
Мне кажется, ваши оценочные суждения неуместны. Хочешь помочь — помогай.
Нет — проходи мимо, нафиг мне твои оценки моих логических способностей?
 
Не выспался что ли? Я же уже всё описал в предыдущем ответе.
угу. видимо не выспался. но у тебя подход просто не верный. ты хочешь все запихать в один файл, используя ООП, а ООП предназначена наоборот - раскладывать все по полкам.
 
но у тебя подход просто не верный. ты хочешь все запихать в один файл, используя ООП, а ООП предназначена наоборот - раскладывать все по полкам.
Блин. Вот с чего такие предположения? Ну да, я хочу максимально описать 1 класс, но не всё запихнуть туда.
Классы как раз для того и нужны, чтобы не дублировать код. Иногда надо будет писать и расширения базового класса, но в большинстве случаев я постараюсь без этого обойтись. Если бы я не планировал никогда расширять базовый класс, я просто написал бы вместо класса функцию)))
А вообще мы отдалились от темы, хватит.
 
Боюсь что ты хочешь магической магии.
Можно конечно сделать так
PHP:
$articles=new publications();
$articles->type = 'articles';
Но это теже яйца только в профиль.
Тебе все равно нужно будет в явном виде инициировать класс.
 
Боюсь что ты хочешь магической магии.
Ага))) Удивлён, что в PHP её нет. Очень зря.
Думаю можно будет привязать к имени текущего модуля, если по-другому не получится. Т.е. типа «global $module;» но это некрасиво.
 
А зачем? Ты же все равно будешь делать все через классы. Создай переменную $moduleName = 'articles'; И инициируй себе через переменную.
 
Ты же все равно будешь делать все через классы
Не всё и не всегда. У меня есть стойкое предубеждение против такого подхода. Пихают эти классы куда не лень везде.
А ведь PHP «создан для того, чтобы умирать» — это не java, он соединение не держит, отработал и забыл.
Такой подход больше предполагает функциональный подход, и классы лишь при необходимости.
Я буду делать классы там, где предполагается повторное использование.
 
Я буду делать классы там, где предполагается повторное использование.
классы это структура. с каждой версией языка вводятся новые дополнительные улучшения для читаемости и более простой поддержки кода - неймспейсы, трейты, интерфейсы, а ты хочешь пилить будто бы на четвертой версии языка.
на одних только уникальных именованиях функций когда задолбаешься - подумаешь, что все же ООП куда интереснее. я уже не говорю о поддержке такого рода кода.
 
Такой подход больше предполагает функциональный подход, и классы лишь при необходимости.
ООП имеет три основных принципа: полиморфизм, инкапсуляция и наследование.
Именно они дают преимущество перед функциональными подходом.
 
Здравствуйте.
Вот у меня к примеру есть код:
PHP:
$a = new b();
class b
{
    function __construct()
    {
        return true;
    }
}
Имеется ли какая-то возможность узнать внутри класса b(), какой переменной он присвоен в данный момент?
В данном примере класс b() инициализирован через $a, есть ли возможность вернуть название переменной, например, через метод __construct()?
Я таки нашел магическую магию! Можно делать через автолоадер классов. Идею можно взять здесь https://github.com/nightflyza/NyanORM

Используется так

$devices=new nya_devices();
$devices2=new nya_devices2();

П.С. Мопед не мой
 
Используется так

$devices=new nya_devices();
$devices2=new nya_devices2();
Четно говоря ничего не понял. Поясните подробнее плз, как это можно использовать.
Я подозреваю, что задавая суффикс «nya_», включается некий лоадер классов?
Самое смешное, что этого пользователя (NightFly) я знаю уже лет 12)
Работали в одном фришном проекте, но потом пути немного разошлись.
 
Четно говоря ничего не понял. Поясните подробнее плз, как это можно использовать.
Я подозреваю, что задавая суффикс «nya_», включается некий лоадер классов?

Самое смешное, что этого пользователя (NightFly) я знаю уже лет 12)
Работали в одном фришном проекте, но потом пути немного разошлись.
Вот в этом файле все раскрыто
 
Вот в этом файле все раскрыто
Ещё подробнее в документации на русском — http://wiki.ubilling.net.ua/doku.php?id=nyanorm
Вообще я не очень удивлен. Ростислав в своем репертуаре — облегчает себе жизнь как только можно, пусть и путём синтаксического сахара.
В этом мы мыслим очень похоже, по-видимому)
 
Здравствуйте.
Вот у меня к примеру есть код:
PHP:
$a = new b();
class b
{
    function __construct()
    {
        return true;
    }
}
Имеется ли какая-то возможность узнать внутри класса b(), какой переменной он присвоен в данный момент?
В данном примере класс b() инициализирован через $a, есть ли возможность вернуть название переменной, например, через метод __construct()?
Может быть просто $GLOBALS использовать? Единственное, в конструкторе это сделать не получится.
PHP:
$a = new b();
$bla_Bla123 = new b();

print_r($a->getVar()); // a
print_r($bla_Bla123->getVar()); //bla_Bla123

class b
{
    private $varName = null;
    function __construct()
    {
        return true;
    }
    public function getVar() {
        foreach ($GLOBALS as $k=>$v) {
            if (!is_object($v)) {
               continue;
            }
            if ($this === $v) {
                $this->varName = $k;
                break;
            }
        }
        return $this->varName;
    }
}
 
Последнее редактирование:
foreach ($GLOBALS as $k=>$v) {
Представьте, насколько будет тормознутым движок, у которого «под капотом» перебор всех переменных?
Да ещё если это будет 30-40 раз через инициализацию в базовом классе.
 
Представьте, насколько будет тормознутым движок, у которого «под капотом» перебор всех переменных?
Да ещё если это будет 30-40 раз через инициализацию в базовом классе.
Понятно, что извращение...) А как еще получить информацию о внешней переменной внутри класса? Разве, что eval использовать, но это еще хуже.
Раз такие вопросы возникают, значит, возможно, Вы неправильно подходите к проектированию вашего прожекта )
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх