Вы себе вообще представляете КАК php должен Вас понимать?
Вы знакомы с другими языками программирования?.....
То что хотите Вы -- не логично с точки зрения процессора (то, что php интерпретируемый, еще не значит, что он может наплевать на железо, точнее, что авторы языка будут игнорировать фундаментальные правила). Ответ, возвращаемый функцией, это не что иное как данные которые выталкиваются из стека вызовов, если их никто не принимает -- естественно они проподают. А Вы рассчитываете, что есть возможность произвести еще и адресацию по этим данным (навигацию по массиву).
Совсем другая картина при работе с объектами.
- Код: Выделить всё
function myfunc()
{return array('one'=>'one', 'two', 'three');}
function myparamfunc($a)
{echo $a;}
$temp = (object)myfunc();
myparamfunc( $temp->one );
Работает, т.к. вы вернули массив из функции, сразу разместив его в переменной, т.е. выделили память для хранения, при этом Вы вызвали приведение типов, приведя результат к типу Объекта и все ровно -- выделили память для него.
- Код: Выделить всё
function myfunc()
{return array('one'=>'one', 'two', 'three');}
function myparamfunc($a)
{echo $a;}
myparamfunc( (object)myfunc()->one );
Не работает, т.к. Вы возвращаете массив, делаете преобразование типов, но при этом не выделяете память для хранения.
- Код: Выделить всё
$res = $this->db->from('table')->where(array('id' => 2)->get(); $this->db->from('table')->where(array('id' => 2)->get()->row();
1) Действия производятся над одним и тем же членом класса основного приложения, объектом db -- все логично, т.к. каждый вызов возвращает ссылку на самого себя (т.е. указатель на объект db).
2) Действия производятся так же как и в первом случае, но все ломается при попытке вызвать метод row(). Причина -- get() возвращает другой объект (не ссылку на него, а сам объект), и т.к. мы не выделяем на него память -- вызов проваливается в никуда и мы получаем ситуацию неопределенности, а следовательно, ошибку.
Фантазия! Фантазия! Она поможет... не форум!