Scalar type hints в PHP

pilot911

Новичок
давно ждал этой фичи, насколько же она сможет упростить жизнь
 

pilot911

Новичок
вот этого синтаксиса

echo foo()[2];

правда, не очень понятно, как проверять наличие индекса, как обычно мы делаем это через isset() или empty()

будет ли подобная проверка предусмотрена ?
 

Духовность™

Продвинутый новичок
я "этот" синтаксис реализовал через объект-обертку массива: http://community.livejournal.com/ru_php/1495679.html

правда, не очень понятно, как проверять наличие индекса, как обычно мы делаем это через isset() или empty()
может как-то так
PHP:
isset(foo()[1])
? ))

объектный массив нужен. нужен объектный массив.

разработчики PHP не понимают очевидных вещей.
 

zerkms

TDD infected
Команда форума
давно ждал этой фичи, насколько же она сможет упростить жизнь
http://habrahabr.ru/blogs/php/101229/#comment_3135549
http://habrahabr.ru/blogs/php/101229/#comment_3136337

-~{}~ 09.08.10 09:40:

объектный массив нужен. нужен объектный массив.
не нужен он никому. точно так же как не нужны магические кавычки, глобальные переменные и goto
 

Духовность™

Продвинутый новичок
zerkms
Если нужен всего один ряд — то можно сделать fetchRow(), если одно поле — то выбирать в запросе одно поле и потом fetchCol(), fetchOne() или какие там методы в используемом вами DBAL
извини, но это утверждение из разряда "не нравятся говёные дороги в России? купи УАЗ/ЛУАЗ/трактор и ездий на здоровье". Т.е.вместо того, что бы сделать ВСЕМ хорошо, мы делаем конкретно для себя, через попу и продолжаем ездить по этим кривым дорогам на велосипедах с колесами от трактора.

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

zerkms

TDD infected
Команда форума
triumvirat
мде. сдаётся мне, ты не умеешь читать (собственно отсюда и была волна недавних твоих вопросов)

повторю в явной форме вопрос: зачем писать метод, который возвращает данных больше, чем нужно?

объекты на динамических языках должны быть сделаны через ассоцмассивы, и более никак
должны быть? кому должны? никому они ничего не должны.

решайте конкретные задачи, и будет вам счастье.
 

Вурдалак

Продвинутый новичок
triumvirat, где Cover_Abstract?

UPD: нашёл.

-~{}~ 09.08.10 02:58:

PHP:
$array = new Cover_Array(array('data' => 'shit'));

echo $array->data;
Что и требовалось доказать. С чего бы вообще ключи массива — свойства объекта?
 

pilot911

Новичок
хотя с другой стороны - есть же ArrayIterator()

можно было бы так сделать

PHP:
function foo() {return new ArrayIterator(array(1, 2, 3));}

echo foo()->offsetGet(1);
 

Духовность™

Продвинутый новичок
Что и требовалось доказать
а ко мне какие претензии? Так ваш PHP устроен:
PHP:
error_reporting ( E_ALL );

$array = array('data' => 'shit');
echo $array['data']['nonexist']; exit;
-~{}~ 09.08.10 03:20:

за ошибку с __set спасибо, не заметил. исправил.
 

Вурдалак

Продвинутый новичок
triumvirat, нельзя использовать оператор -> для доступа к ключам массива, в противном случае будет такой ключ, который использовать будет нельзя, в данном случае это data. Как тебе подобное вообще в голову-то пришло?

-~{}~ 09.08.10 03:26:

Я так и не понял зачем это нужно-то? Индексаторы как раз хорошо для этих целей подходят.
 

Духовность™

Продвинутый новичок
нельзя использовать оператор -> для доступа к ключам массива, в противном случае будет такой ключ, который использовать будет нельзя, в данном случае это data.
да все можно, почему нельзя то? У меня просто в конструкторе была ошибка, которую ты обнаружил - вызывался __set вместо явного вызова кода проверки значения.

-~{}~ 09.08.10 03:29:

Я так и не понял зачем это нужно-то?
что именно?
 

Духовность™

Продвинутый новичок
element — свойство массива? Нет.
как это нет?
PHP:
$array = new Cover_Array( array('foo', 12345, 
                                'element' => array('key' => 'value', 
                                                   'key2' => 'value2')) );
print_r($array);
Код:
Cover_Array Object
(
    [data:protected] => Array
        (
            [0] => foo
            [1] => 12345
            [element] => Cover_Array Object
                (
                    [data:protected] => Array
                        (
                            [key] => value
                            [key2] => value2
                        )

                )

        )

)
Я так и не понял зачем это нужно-то?
почитай этот топик полностью: http://community.livejournal.com/ru_php/1495679.html
 

Вурдалак

Продвинутый новичок
У массива свойствами могут быть: длина, размерность, общее кол-во входящих в него элементов и т.д. Список ключей — тоже свойство, только protected, а сами ключи — нет. Я к тому, что надо убрать доступ через __set() и __get().
 

Вурдалак

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

-~{}~ 09.08.10 04:06:

Как обычно в оффтопик быстро ушли, предлагаю в корзину отправить.
 

fixxxer

К.О.
Партнер клуба
Не то правят. Надо чтобы встроенный array() был implements ArrayAccess/Iterator.
 
Сверху