2017-03-17 3 views
-3

ダイナミックで設定された文字列を大文字に変換する必要があります__set私のPHPクラスのコンストラクタです。 JavaScriptと同じように。.toUpperCase()機能。JavaScriptのようにPHPクラスに自動作成されたプロパティの文字列を大文字にする方法はありますか?

Exemple:出力に

$myObject = new Post(); 
$myObject->fooVar = 'Upper Case Test'; 
$myObject->fooVar->toUpperCase(); 
echo $myObject->fooVar; 

必要があります。 UPPER CASE TEST

これは私の実際のクラスのコードです:

class Post { 
    private $data; 

    public function __construct() 
    { 
     echo 'Class "'. __CLASS__. '" started!'; // constructor debug 
    } 

    public function __destruct() 
    { 
     echo 'Class "'. __CLASS__. '" destroyed.'; // constructor debug 
    } 


    public function __get($varName) 
    { 
     if (!array_key_exists($varName, $this->data)) 
     { 
      //this attribute is not defined! 
      $this->data[$varName] = 'ERROR!'; 
      return $this->data[$varName]; 
     } 
     else 
     { 
      return $this->data[$varName]; 
     } 
    } 

    public function __set($varName, $value) 
    { 
     $this->data[$varName] = $value; 
    } 

    public function toUpper($object){ 
     $object = strtoupper($object); 
     return $object; 
    } 
} 

が、このことは可能ですか?すべてのための

おかげで、

答えて

0

私はあなたのコード例で構文を使用してそれを行うための方法があるとは思いません。アクセスしている変数は文字列で、toUpperCase関数はありません。このような関数形式を使用する必要がある場合は、このようにクラスにtoUpperCase関数を追加することで、これを行うための最良の方法を言うと思います。

class Post { 

    ... 

    public function toUpperCase($key){ 
     if (array_key_exists($key, $this->data) && is_string($this->data[$key])) { 
      $this->data[$key] = strtoupper($key); 
     } 
    } 
} 

次に、あなたがそうのようにそれを使用することができます:

$myObject = new Post(); 
$myObject->fooVar = 'Upper Case Test'; 
$myObject->toUpperCase('fooVar'); 
echo $myObject->fooVar; 

は、しかし、私は次のようなものが良いだろうと思うとtoUpperCase機能を必要としません。

if ($myObject->fooVar) 
    $myObject->fooVar = strtoupper($myObject->fooVar); 

私はキーが存在しない場合(例外は良くなるが、あなたはこのクラスを使用する方法によって異なりかもしれません)最低でfalseを返すためにあなたの__get定義を変更お勧めします。文字列を返す場合、余分なコードが不要なエラーチェックとの文字列比較が必要になります。

+0

答えをありがとう。私の質問の目的は、オブジェクトのコンテンツを変更するいくつかのインライン関数で、JavaScriptのようにPHPオブジェクト指向を使用する方法を知っている。 例: ' var test = 'オブジェクト'; var concatText = 'JavaScript ###'; alert(test.concat( ""、concatText).replace( '###'、 '123')。toUpperCase()); ' –

関連する問題