[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вложенные объекты
Игорь_Vasinsky
к примеру есть такой вызов

$obj->$metod()->innerMethod('param'); 


как в innerMethod() - определить имя method() ??

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
forza
Посмотрите, может тут что-нибудь полезного найдете...

http://stackoverflow.com/questions/2110732...n-method-in-php

_____________
Заработок для веб-разработчиков: CodeCanyon
Мое Портфолио
T1grOK

class My{
function __get($name){
$obj = new You();
$obj->name = $name;
return $obj;
}
public function __call($method, $params) {
$obj = new You();
$obj->name = $name;
return $obj->$method($params);
}
}

class You{
public $name;
function innerMethod(){
echo $this->name;
}
}



И хранить массив методов(или свойств), чтоб при повторном вызове отдавать существующие экземпляры классов.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Игорь_Vasinsky
нет.

при

            $callers= debug_backtrace();
echo '<pre>' . print_r($callers,1);


отображается только имя самого метода в котором этот вызов, а это можно проще сделать

__METHOD__

но мне нужно предыдущее имя метода

T1grOK
класс один

смотри в чём соль

$obj->$metod1()->innerMethod('param');
$obj->$metod2()->innerMethod('param');

innerMethod() - Должен понять куда он был вложен


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Игорь_Vasinsky
оо, я понял, можно создать ёщё одно private свойство объекта

и при вызове верхнего метода - его назначать

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
T1grOK
А понял, цепочка которая возвращает $this.
А почему бы при вызове каждого класса не присваивать какому то свойству methodName значение. Решение конечно не айс, но как вариант.

P.S. Ну да собственно о том, что ты и написал.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Игорь_Vasinsky
ну, может кто ещё заглянет и даст совет, но в methodName есть свой плюс

он будет работать и при таком варианте

  $form->setInput()->setName('email')
->
setType('text')
->
setClass('myEmail')
->
setId('myEmail')
->
setAttr('onclick="anyfunction"')
->
addInput();


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Игорь_Vasinsky
работает))

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Invis1ble
посмотри в сторону Abstract Factory

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

vital
Уже вроде написали, что вложенный класс не должен звисеть от родителя да?

_____________
"Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."

Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar
Игорь_Vasinsky
речь об единственном классе.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
kaww
Цитата (Игорь_Vasinsky @ 30.10.2013 - 18:22)
innerMethod() - Должен понять куда он был вложен
Игорь_Vasinsky
kaww
выше же предлагали это вариант)

отлавливается тупо __METHOD__ т.е. имя самого вложенного метода.


и потом - решил использовать доп. свойство - куда передавать имя род. метода - чтобы работала конструкция

 $form->setInput()->setName('email')
->
setType('text')
->
setClass('myEmail')
->
setId('myEmail')
->
setAttr('onclick="anyfunction"')
->
addInput();





а теперь внимание вопрос:

кто нить может сказать - можно ли свойство объекта задать на кириллице?

типа

$свойство = свойство


- ответ - получается что да, иначе как объяснить

Понадобилось мне создавать property динамически, и я пришёл к такому решению


public function createProperty($name, $value){
$this->$name = $value;
}

public function setTextOption($text){
if(!property_exists(__CLASS__, $text)){
$this->createProperty($text,$text);
$this->text = $text;
}
else
$this->text = $text;
var_dump($this->text);
}


Вызов

 ->setTextOption('Первый')



работает :D

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.