А есть известные причины по которым не сделали такую функцию, а для нахождения папок сделали?
и второй вопрос что такое stdClass почему он не хочет отдавать данные вот так obj['prop']? |
Цитата:
Используется там, где нужно работать просто с объектом без определенного класса Например json_decode по-умолчанию(без второго параметра) возвращает объект stdClass Естественно, что экземпляр этого класса не будет отдавать данные как массив. Нужно использовать номральный синтаксис обращения к свойствам объекта. |
Gvozd,
ясн, а обьект и массив в PHP одно и то же? То есть это один и тот же класс Array? п.с. как проверить существует ли свойство у $_GET? property_exists($_GET, 'getCategories') варнингует Warning: First parameter must either be an object or the name of an existing class |
Цитата:
Массивы не являются объектами. У них нету ни свойств ни методов, а есть только ключи и соответсвующие им элементы. Причем ключи могут быть как целочисленные, так и строковые. В последнем случае - получаем ассоциативный массив, но он не становится от этого объектом. Получать досту к элементу предполагается таким синтаксисом: $array[0], $array['text_key'] А объекты - они уже имеют свойства, методы и прочая. Доступ к свойствам и методам осуществляется через -> (или :: для статических) Экземпляры некоторых классов (реализующих интерфейс ArrayAccess, и при необходимости несколько сопутсвующих) могут использоватся как массивы. Но это уже будут объекты, а не массивы. Но это уже из разряда тех кун-гфу: не все знают, и еще меньше используют |
Некоторые мысли на эту тему:
К примеру array_keys(); имеет следующий прототип: array array_keys ( array $input [, mixed $search_value [, bool $strict = false ]] ) Как мы видим array_keys() имеет тип array. А вызывается он так array_keys(), а не так array.array_keys() вероятно потому что в заголовочном файле array прописано примерно такая строчка: using namespace array; Что создает видимость считать, что array_keys() это отдельная от объекта array функция. А обращение к элементам массива типа $array[0], это ничто иное как перегруженный оператор [], который имеет реальный член класса типа array::get(); Если честно не понятно почему разработчики php так усердно скрывают реальные типы объектов. |
monolithed,
видимо чтобы не путали массивы с обьектами? нет? |
monolithed,
Мне кажется что вы взяли все свои предположения с потолка. Или вы реально читали исходные коды, и все описанное вами видели там? |
Цитата:
Цитата:
UPD: Цитата:
|
Цитата:
Насколько я понял исходники, в качестве массивов используются структуры типа HashTable, а объекты тип ArrayObject просто содержат в себе экземпляр HashTable, который и подсовывают при использовании их как массивов Функции высокого уровня, типа array_key_exists() внутри работают именно в процедурном стиле, и более низкоуровневые функции также до последнего принимают одним из параметров HashTable, вплоть до zend_hash_exists, который уже просто пробегается циклом по представленному HashTable Вот кстати сам HashTable Код:
typedef struct _hashtable { Весь код обслуживающий его вынесен в отдельные функции, которые принимают массив одним из параметров. Таким образом array_key_exists() является самостоятельной функцией, принимающей массив одним из аргументов, но не более |
Цитата:
Сейчас скачал исходники действительно на С, только разобраться пока не получилось. |
Часовой пояс GMT +3, время: 18:48. |