【问题标题】:$object->($string) [closed]$object->($string) [关闭]
【发布时间】:2012-05-15 19:56:11
【问题描述】:

我正在处理一个类的对象,它不是我写的,也不能改变。这个类有非常多的属性。我想循环浏览这些属性中的一半(一个选择组)。我将必要属性的名称放入一个数组中,并希望循环浏览它们。这可能吗?语法是怎样的?

class B{
   public $foo = 'hi';
   public $bar = 'bye';
   ...etc, etc.
}

$arr = array(1=>'foo', 2=>'bar', ...)
$b = new B();
foreach($arr as $val){
  echo $b->($val); //<-----does not work
}

【问题讨论】:

标签: php


【解决方案1】:

是的,你可以。看手册:http://php.net/manual/en/language.variables.variable.php

<?php
class foo {
    var $bar = 'I am bar.';
}

$foo = new foo();
$bar = 'bar';
$baz = array('foo', 'bar', 'baz', 'quux');
echo $foo->$bar . "\n";
echo $foo->$baz[1] . "\n";
?>

上面的例子会输出:

I am bar.
I am bar

【讨论】:

    【解决方案2】:

    你很亲密:

    $b->$val; //Or...
    $b->{$val};
    

    【讨论】:

      【解决方案3】:
      echo $b->$val;
      

      或方法

      echo $b->$val(params...);
      

      您可以使用reflection functions 之一来获取所有方法和成员

      【讨论】:

        【解决方案4】:

        您可以像这样遍历每个变量:

        $b= new B();
        
        foreach($b as $var => $value) {
            echo "$var is $value\n";
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-15
          • 1970-01-01
          • 1970-01-01
          • 2016-11-16
          • 2014-10-22
          • 2013-08-05
          相关资源
          最近更新 更多