PHP: çizgi ile Nesne değişkenleri Tire değiştirin

2 Cevap php

Ben bir PHP nesne (PEAR'ın XML_Serializer kullanarak) bir dış kaynaktan gelen var. Bazı değişkenler gibi adı tire var:

<?php
  $company->{'address-one'};

Ben sadece bu yüzden ben aptal Curlys ve tırnak ile uğraşmak zorunda değilsiniz en iyi yolu, bu nesneye geçmesi ve tire yerine çizgi ile nesne özelliklerini yeniden adlandırmak için bilmek istiyorum.

2 Cevap

Ben sadece başka bir şekilde düşündüm:

PHP5 sihirli yöntemler __get kullanarak ve __set onlar aslında ne zaman çizili özellikleri var gibi görünmesi olabilir. Bu yarar alan adları dönüştürülmüş bekliyoruz etmeyen, diğer bazı kod varsa, onlar hala çalışır edeceksiniz:

function __get($var) {
    if (strpos($var, '-') !== false) {
        $underscored = str_replace("-", "_", $var);
        return $this->$underscored;
    }
}
function __set($var, $val) {
    if (strpos($var, '-') !== false) {
        $underscored = str_replace("-", "_", $var);
        $this->$underscored = $val;
    }
}

echo $company->{'address-one'};  // "3 Sesame St"
echo $company->address_one;    // "3 Sesame St"

// works as expected if you somehow have both dashed and underscored var names
// pretend: $company->{'my-var'} ==> "dashed", $company->my_var ==> "underscored"
echo $company->{'my-var'};  // "dashed"
echo $company->my_var;    // "underscored"

Tabii ki, aslında elemanların sınıfına bu yöntemleri eklemek için bir yol bulmak zorunda. Ben bu tür bir şey ile çok iyi değilim, ama belki de, ya da bir sarıcı sınıf oluşturarak PHP'nin Yansıma işlevleri kullanarak çalışır.