stdClass nesneleri, PHP Predefined Classlara aittir. Dizileri (array) nesnelere çevirmek, yada nesneleri dizilere çevirmek, çalışmamıza bağlı olarak çok kullanışlı olabilir. Dizi veya nesne tek boyutluysa (one-dimensional), işimiz oldukça kolaydır. Fakat bunlar çok boyutlularsa (multi-dimensional) işimiz biraz zorlaşabilir.
Aşağıda çok boyutlu dizileri ve nesneleri birbirine dönüştüren 2 fonksiyon paylaşıyorum. Sonrasında da kullanımlarına örnek vereceğim.
Nesneyi Diziye Dönüştürmece
< ?php
function objectToArray($d) {
if (is_object($d)) {
// Gelen nesnenin özelliklerini get_object_vars metodu
// ile alırız
$d = get_object_vars($d);
}
if (is_array($d)) {
// Nesneden diziye çevirilmiş veriyi döndürür
// burdaki __FUNCTION__ bir magic constanttır.
// recursive gibi kendini çağırır
return array_map(__FUNCTION__, $d);
}
else {
// Return array
return $d;
}
}
?>
Diziyi Nesneye Dönüştürmece
< ?php
function arrayToObject($d) {
if (is_array($d)) {
// diziyi nesne olarak kendine döndürür
// __FUNCTION__ magic constanttır.
return (object) array_map(__FUNCTION__, $d);
}
else {
// Return object
return $d;
}
}
?>
Fonksyionların kullanımı
// stdClass nesnesi yaratıyoruz
$init = new stdClass;
// bir kaç veri ekliyoruz
$init->foo = "Test data";
$init->bar = new stdClass;
$init->bar->baaz = "Testing";
$init->bar->fooz = new stdClass;
$init->bar->fooz->baz = "Testing again";
$init->foox = "Just test";
// nesneyi diziye dönüştürme
$array = objectToArray($init);
// diziyi nesneye dönüştürme
$object = arrayToObject($array);
// Print objects and array
print_r($init);
echo "\n";
print_r($array);
echo "\n";
print_r($object);
Çıktıları ise şu şekilde olmakta ;
// $init
stdClass Object
(
[foo] => Test data
[bar] => stdClass Object
(
[baaz] => Testing
[fooz] => stdClass Object
(
[baz] => Testing again
)
)
[foox] => Just test
)
// $array
Array
(
[foo] => Test data
[bar] => Array
(
[baaz] => Testing
[fooz] => Array
(
[baz] => Testing again
)
)
[foox] => Just test
)
// $object
stdClass Object
(
[foo] => Test data
[bar] => stdClass Object
(
[baaz] => Testing
[fooz] => stdClass Object
(
[baz] => Testing again
)
)
[foox] => Just test
)