Вопрос поо классы

StalkerClasses

Новичок
Есть пример кода:
Код:
class test_class {
    var $typeClassName;

    public static function main() {
        return 1;
    }
}


class t3e {
    function main() {
        $object = new test_class;
        return $object->main();
    }
}
Как можно сделать вот такую конструкцию?
t3e::test_class()->param1()->param2()

Где есть один класс-обертка "t3e" и класс "test_class" который может заменяться?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Чтобы сделать чейн, надо, чтобы у тебя метод возвращал экземпляр класса. Сейчас у тебя он не сработает.
 

fixxxer

К.О.
Партнер клуба
callStatic, но это, конечно, извращение адово, не надо этого хотеть
 

StalkerClasses

Новичок
callStatic, но это, конечно, извращение адово, не надо этого хотеть
Так получилось сделать.

Есть обычный класс с $this;
Внутри этого класса вызывается вот такая конструкция: t3e::test_class()->param1()->param2()

Как возможно внутри нее получить $this-родительского класса?
 

AnrDaemon

Продвинутый новичок
Так получилось сделать.

Есть обычный класс с $this;
Внутри этого класса вызывается вот такая конструкция: t3e::test_class()->param1()->param2()

Как возможно внутри нее получить $this-родительского класса?
Налить чайку и крепко подумать о том, что ты делаешь.
Скорее всего, ты делаешь что-то не так, раз приходится так сильно извращаться.
 

AmdY

Пью пиво
Команда форума
Здесь явно проблемы с основами ООП http://php.net/oop
>>t3e::test_class()->param1()->param2()
это переводится как "у КЛАСС t3e вызывается публичный СТАТИЧЕСКИЙ метод test_class, который возвращает ОБЪЕКТ содержащий публичный метод param1, который возвращает ОБЪЕКТ содержащий публичный метод param2".
 

StalkerClasses

Новичок
В шаболнах сейчас получилось вот так и как понимаю это лучше:
Код:
  <img src="<? $this->plugin->img('uploads/pics/' . $value['image_pic']); ?>">
Но преблема в том, что у картинки еще может быть высота и ширина... И надо сделать как-то вот так:
Код:
   <img src="<? $this->plugin->imgRes('uploads/pics/' . $value['image_pic'])->width(250)->height(100); ?>" />
 

Kotofey

FloodMaster.
В шаболнах сейчас получилось вот так и как понимаю это лучше:
Код:
  <img src="<? $this->plugin->img('uploads/pics/' . $value['image_pic']); ?>">
Но преблема в том, что у картинки еще может быть высота и ширина... И надо сделать как-то вот так:
Код:
   <img src="<? $this->plugin->imgRes('uploads/pics/' . $value['image_pic'])->width(250)->height(100); ?>" />
может сделать чтоб и imgRes() и width() и heiight() делали return $this; ?
 

StalkerClasses

Новичок
Да, все правильно.
Но тогда что бы выводить окочательно путь картинки нужно делать что-то вроде ->end();

Как определить-то когда закончились передача параметров?
Может только высота windth передана. или еще какой-нибудь третий параметр...
 

Kotofey

FloodMaster.
Да, все правильно.
Но тогда что бы выводить окочательно путь картинки нужно делать что-то вроде ->end();

Как определить-то когда закончились передача параметров?
Может только высота windth передана. или еще какой-нибудь третий параметр...
Ну правильно взять те же bind и excecute в pdo когда надо завершить передачу параметров вызывай завершающий метод который генерирует нужный код, а если ты к примеру не передал какой-то параметр, используй значение по умолчанию или пропусти его , если это возможно.
 

AmdY

Пью пиво
Команда форума
fixxxer, +1 к toString, только тогда должно быть echo
<img src="<? echo $this->plugin->imgRes('uploads/pics/' . $value['image_pic'])->width(250)->height(100); ?>" />
 

WMix

герр M:)ller
Партнер клуба
AmdY, намного интереснее что возвращает toString, и как уменьшать будем....
 

StalkerClasses

Новичок
Как правильно можно добавить метод в класс?
И в переменную plugin?

$this->plugin->imgRes()
$this->plugin->url()

Что бы было вроде папки - где храняться эти методы и внутри них был доступен $this.
К примеру добавил в папк
Код:
function formantString($string, $param1, $param2) {

print_r($this);

}
 

StalkerClasses

Новичок
Вот что получилось.
PHP:
        function __call($name, $args) {
            if (array_search($name, $this->plugins_list)) { // проверяем есть ли плагин в списке разрешенных
                require_once('plugins/function.'.$name.'.php');
                if (function_exists('plugin_' . $name)) {
                    array_unshift($args, $this);
                    return call_user_func_array('plugin_' . $name, $args);
                }
            }
            throw RunTimeException('There is no method with the given name to call');
        }

function plugin_url($self, $n1, $n2, $n3) {
print_r($self);
return "URL";
}
Осталось два вопроса:
1. можно как-то функции вызывать не $this->url() а $this->plugin->url()?
2. текучий интерфейс - не подходит - слушком сложно.
как еще можно парамтры в данном случае например для картинки - высота, ширина, там еще много различных параметров - водяной знак, поворот картини.
 
Последнее редактирование:
Сверху