1

ここ数年、PHP を使用していません。主に C、C++、Objective-C、Ruby、および ECMAScript に重点を置いています。他の言語で実験して、頭をすっきりさせている夜を過ごしています。

PHP.net で、配列をオブジェクトにキャストして、インスタンス変数であるかのようにキーで値にアクセスできるようにする例を見つけました。

$obj = (object)array('foo' => 'bar', 'property' => 'value');

array演習として、同じ引数を取り、既にオブジェクトにキャストされた「配列」を返す関数を作成したいと思います。何かのようなもの:

function o_array(\* variable amount of key=>value args like array()*\)
{
  return (object)array.call(self, arguments);
}

PHP で可変量の key=>value 引数を取る関数を作成する方法がわかりません。アドバイスをいただきありがとうございます。

更新
PHP の主な強みは柔軟性と一般的な狂気 (弱点でもあります) であると考えているため、将来的に次の変更が行われることを願っています。名前付きパラメーターはサポートされていません: 他の項目の中で名前付きパラメーターに関する PHP 言語会議。

4

4 に答える 4

2

可変量の引数が可能func_get_argsです:

function f()
{
    $args = func_get_args();
    // ...
}

しかし、関数には「キー=>値の引数」というものはありません。したがって、できる唯一のことは、それらを配列として渡すことです(これにより、関数全体が無意味になります)。

function arrayToObject(array $from)
{
     return (object)$from;
}
于 2013-02-17T09:15:57.483 に答える
1

PHP は名前付き引数を許可しないため、これは不可能です。配列は関数ではなく言語構造であるため、キーと値の割り当てを使用できる唯一の場所です

于 2013-02-17T09:14:59.757 に答える
0

配列をオブジェクトに変換しようとしているようです。その場合は、次のことができます。

function array_to_object($array) {
  $obj = new stdClass;
  foreach($array as $k => $v) {
     if(is_array($v)) {
        $obj->{$k} = $this->array_to_object($v); 
     } else {
        $obj->{$k} = $v;
     }
  }
  return $obj;
} 

したがって、次の配列がある場合:

 $a = array('foo' => 'bar', 'property' => 'value');

それを変換すると、次のようになります。

 $o = array_to_object($a); 
 echo ($o->foo ); // will print 'bar'
于 2013-02-17T09:21:12.850 に答える
0

私の理解では、これが最も賢明な方法だと思います。

class Array()
{
   public $array = array('foo' => 'bar', 'property' => 'value');  
} 

 //initiate an object...
   $obj = new Array();
   $array = array_values($obj->array);
   print_r($array); //will print 'bar' and 'value'   
} 
于 2013-02-17T11:42:55.900 に答える