Цепочки объектов.

akxxiv

Новичок
Цепочки объектов.

Вопрос собственно такой возможно ли в 4-ке такоей

$obj->objCreate("name")->func();

РНР ругается на эту строку, хотя такое работает

$r = $obj->objCreate("name");
$r->func();

В пятерке я точно такое выдел, хотя может я че не правильно делаю.
 

kruglov

Новичок
ну, если ругается, то, наверное, невозможно?

Даже так нельзя:
PHP:
echo parse_url('http://phpclub.ru/')['host']
 

akxxiv

Новичок
Щас попробую на пятерке запустить

-~{}~ 18.05.07 16:00:

А на пятерке рабатет. Мда.
 

Krishna

Продался Java
akxxiv
О чем это говорит? Может быть о том, что уже пора перстать писать на ископаемых версиях?
 

dark-demon

d(^-^)b
код не может быть излишне переносимым :) на мой взгляд не стоит из-за мании использовать цепочки вызовов функций отказываться от всё ещё весьма популярного php4.
 

kruglov

Новичок
dark-demon
Мании?
Лично мне, наоборот, после Java и Javascript пришлось переучиваться, оказывается, в php так делать почему-то нельзя.

Мое замечание только относительно "мании", а не относительно переносимости.
 

dark-demon

d(^-^)b
я тоже имею эту дурную привычку делать цепочки :)
проблемы начинаются при отладке и рефакторинге, ибо приходится рвать цепочки, смотреть что кто выдал, а потом снова собирать в красивые цепочки...
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
dark-demon а какие именно проблемы-то?
Я просто проверяю все данные и бросаю/ловлю исключения - как в Java.
Проблем с тем, чтобы понять, какой объект бросил исключение, нет по определению.
Может, проблема в том, что Вы используете только механизм "цепочек объектов", а не всю OOP-функциональность 5го PHP?
Если PHP, как Java, не требует детальной работы с exception-ами, это не значит, что это необязательно. IMHO.
 

dark-demon

d(^-^)b
я не использую ни того, ни другого, так как не вижу в этом смысла.
и исключения - не панацея, а костыль, чтобы можно было использовать цепочки.
 

StUV

Rotaredom
и исключения - не панацея, а костыль, чтобы можно было использовать цепочки.
весьма оригинальное мнение на этот счет
квн блин... =))))))))))))))))))))))))))))))))))))))))))))))))
 

dark-demon

d(^-^)b
ща добью =)
исключения - это оператор goto в красивой обёртке. давайте лучше поспорим следует его употреблять где только можно или всё же не стоит :)
 

StUV

Rotaredom
а php бесполезный враппер к машинным кодам =)))

-~{}~ 19.05.07 18:25:

писал же когда-то в машинных инструкциях...
нафик мне сдались все эти ооп, оод итдтп - ты мне прям глаза раскрыл =)

-~{}~ 19.05.07 18:39:

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

+
в крупном приложении смешанный подход к обработке исключений приводит к ненужному усложнению кода, потере понятности и в конечном счете к огромному числу трудно отловимых багов (т.е. например exceptions + массив строк, передача "наверх" boolean, ...)

++
в многокомпонентных системах исключения упрощают дебаг за счет организации классов исключений в объектную иерархию с разделением веток наследования по неймспейсам

-~{}~ 19.05.07 18:40:

т.е. таким образом проще отслеживать ответственность компонентов
 

dark-demon

d(^-^)b
ага, кроме отладки собственно бизнесс-классов добавляетя отладка ещё и классов-исключений. :)
 

StUV

Rotaredom
классы исключений часто выглядят так:
PHP:
class SomeChildException extends SomeException
{
}
очень много отладки =)))
 

dark-demon

d(^-^)b
И толку от таких классов? :)

с тем же успехом можно после каждой строчки кода писать assert('true'); - для проверки истинности истины :)
 

dark-demon

d(^-^)b
а я теба :-ъ и не писай в мой горшок! :)

-~{}~ 19.05.07 20:01:

кстати, если есть желание перевести спор в предметное русло, можешь привести пример хорошего применения исключений, а я попытаюсь раскритиковать :)
 

dark-demon

d(^-^)b
может и со мной поделишься осознанным? :)

пока я там вижу много глупостей:

Код:
function connect(Config $conf) {
    $dsns =& $conf->searchPath(array('config', 'db'));
    if ($dsns === FALSE) throw new Example_Config_Exception(
        'Unable to find config/db section in configuration.'
    );

    $dsns =& $dsns->toArray();
    
    foreach($dsns as $dsn) {
        try { 
            $this->connectDB($dsn);
            return;
        } catch (Example_Datasource_Exception e) {
            // Some warning/logging code recording the failure
            // to connect to one of the databases
        }
    }
    throw new Example_Datasource_Exception(
        'Unable to connect to any of the configured databases'
    );
}
тут исключение может сработать в трёх местах:

1. когда в конфиге не находятся настройки подключения к БД. совершенно не понятно, что эта проверка забыла в функции подключения, ну да ладно, дальше веселее.
2. далее в цикле мы перебираем dsn-ы и в случае первого же удачного коннекта выходим из функции. в случае же каждого неудачного коннекта кричим "ахтунг, не можем законнектиться". мой мозг отазывается понимать смысл этих плясок.
3. если так никуда и не приконнектились - генерируем исключение со словами "не смогли приконнектиться к некоторым базам". я бы сказал жёстче - "не смогли приконнектиться ни к одной базе".

не проще ли было написать что-то вроде:

Код:
if (empty($conf['db'])) {/*ахтунг, нет настроек! */}
$erordns= array();
foreach ($conf['db'] as $dsn) $db->connectDB($dsn) or $errordns[]= $dns;
if ($errordns) /* ахтунг, к некоторым dns не приконнектились */
 
Сверху