PHP. Возможно ли как то изменить имя объекта?

интернет Компьютеры программирование php

Возможно ли как то изменить имя объекта что бы функция get_class() его возвращала.
т.е.:

class A {}
$a = new A();
get_class($a); // A

// set_class_name($a, 'B');

get_class($a); // B

Примечание:
DenisDangerous, нет, не то. class_alias('foo', 'bar'); не меняет его имя, а как я понял устанавливает имя в области видимости, это действует например для создания объекта:
class A {}
class_alias('A', 'B');
$a = new B();
get_class($a); // A

Примечание:
John Freeman, работаю с Yii.
У меня есть универсальная модель Setting для работы с разными компонентами. Когда создаю модель, например:
$model = new Setting('Page');
Yii при submit возвращает $_POST['Setting'] - берется с имени класса, а мне надо что бы возвращала в зависимости от переданного параметра, в данном случае $_POST['Page'].

Поэтому мне нужно менять имя класса Setting в зависимости от параметра.

Когда их много:
$model[] = new Setting('Page');
$model[] = new Setting('Comment');
$model[] = new Setting('User');
Можно конечно и использовать $_POST[Setting']['Page'], $_POST[Setting']['Comment'] ... , но так было бы удобнее...

Примечание:
Prototype.Denis, не то. Класс у меня один, это Setting, мне нужно что бы у него название было разное в зависимости с чем он работает. Нет классов Page, Comment ... , мне нужно что бы они, так сказать создавались виртуально. Клоны Setting с различными именами.

Примечание:
ладно, видимо я много хочу, и это не реализовать...

Примечание:
Если поподробнее о Setting, то он работает с конфигурацией приложений (изменение конфигураций в админке), является так сказать моделью другого класса Configuration, которая все обрабатывает.

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

$model = Setting::model(array('comp1','comp2',..., 'compn'));
// Внутри как раз таки он сам себя и клонирует через __clone() для каждого componenta.

Дальше я могу работать как с обычной моделью yii.

Валидировать:
$model['comp1']->validate();

Сохранить:
$model['comp1']->save();

Вывести форму:
<?php echo $form->textField($model[comp1],'[comp1]title'); ?>

А вся проблема (даже не проблема, а желание) избавиться в формах от "[comp1]" перед названием атрибута.

Примечание:
... что бы было не так:

Форма:
<?php echo $form->textField($model[comp1],'[comp1]title'); ?>
Установка атрибутов:
$model['comp1']->setAttributes($_POST['Setting']['comp1']);

а так:

Форма:
<?php echo $form->textField($model[comp1],'title'); ?>
Установка атрибутов:
$model['comp1']->setAttributes($_POST['comp1']);

Примечание:
Prototype.Denis, все эти доки мною перечитаны несколько раз. Конструктор форм мне в данном случае не подойдет. Формы попадаются не стандартные, и я так только еще больше гемороя получу.
Ответы:
прочитай про символические ссылки и алиасы
Так как ты написал - полный бред. Да, показывай зачем тебе это надо. Либо замена, либо алиас прокатят.
$model = (new Setting())->get('Page');  
Ну так почему нельзя "универсальным" Setting'ом и обрабатывать входящие?
Раз он у вас обёртка на выход, пусть будет и обёрткой на вход и не надо менять никакие имена.
Не ужели в Yii так с формами... Не верю. =)
Пункт 5-ый... Не является ли решением?
И никакие $_POST и его индексы нафиг не сдались...
Всю нестандартность форм нужно заворачивать на уровне создания модельки, а не формы. В форму отдавать уже готовый, нестандартный класс.


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.