Приведение типов данных php, array to object, object to array.
Приведение типов в php делается просто:
$newTypeVar = (type)$var;
Ну или конкретные примеры:
$array = (array)$object; $object = (object)$array;
Ну, а теперь о багах, возникающих при приведении типов:
// Объявляем массивчик $array = array('11' => 'one', 22 => 'two'); print_r ($array); /* Получаем: Array ( [11] => one [22] => two ) */ echo $array[11]."\r\n"; // Получаем: one $stdClass = (object)$array; print_r ($stdClass); /* Получаем: stdClass Object ( [11] => one [22] => two ) */ /* echo $array->11; вернет ошибку парсинга, т.к. наименование свойства объекта не может являться числом, но при автоматическом приведении типов в php названия свойств элементов объекта храняться с строке, но обратиться к ним невозможно, т.к. описать это для интерпритатора php не представляется возможным * $array->11; * $array->'11'; Ничего из этого не сработает */ $arrayTwo = (array)$stdClass; print_r ($arrayTwo); /* Получаем: Array ( [11] => one [22] => two ) */ echo $arrayTwo[11]; // Получаем: one
php конвертация объекта в массив
Как конвертировать объект в массив?
$item = array( "color" => "black", "size" => "medium", "pieces" => 100, "cost" => 44.99 ); $itemObject = (object) $item; echo "Array as object:\n"; print_r($itemObject); echo "\n"; $itemArray = (array) $itemObject; echo "Object as array:\n"; print_r($itemArray);
вернет Array as object: stdClass Object ( [color] => black [size] => medium [pieces] => 100 [cost] => 44.99 ) Object as array: Array ( [color] => black [size] => medium [pieces] => 100 [cost] => 44.99 )
А как будет работать с защищенными и приватными свойствами объекта?
class Casting { public $pub = "I'm a public member"; protected $pro = "I'm a protected from outlanders"; private $pri = "I'm a hidden property"; } $casting = new Casting(); print_r($casting); print_r((array) $casting);
Вернет
Casting Object ( [pub] => I'm a public member [pro:protected] => I'm a protected from outlanders [pri:private] => I'm a hidden property ) Array ( [pub] => I'm a public member [*pro] => I'm a protected from outlanders [Castingpri] => I'm a hidden property )