簡體   English   中英

PHP:使用下划線替換對象變量中的虛線

[英]PHP: Replace Dashes in Object Variables With Underscores

我有一個來自外部源的PHP對象(使用PEAR的XML_Serializer)。 一些變量在名稱中有破折號,如:

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

我只是想知道通過這個對象的最佳方法是什么,並用下划線替換破折號重命名對象屬性,這樣我就不必處理愚蠢的卷曲和引號。

使用get_object_vars()循環遍歷它們並根據需要進行替換:

function replaceDashes (&$obj) {
    $vars = get_object_vars($obj);
    foreach ($vars as $key => $val) {
        if (strpos($key, "-") !== false) {
            $newKey = str_replace("-", "_", $key);
            $obj->{$newKey} = $val;
            unset($obj->{$key});
        }
    }
}

我只是想到了另一種方式:

使用PHP5的魔術方法__get__set你可以使它看起來像下划線屬性,當他們實際上沒有。 這樣做的好處是,如果有一些其他代碼不希望轉換字段名稱,它們仍然可以工作:

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"

當然,您必須找到一些方法將這些方法實際附加到元素的類中。 我對這種事情不太滿意,但也許它可以通過使用PHP的Reflection函數或創建一個包裝類來工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM