如何获得方法php的vars

时间:2014-07-16 03:57:16

标签: php oop breadcrumbs

我想创建Auto breadcrumb,因为数组包含带有2个键的子数组(链接,标题)。 像这样:

array (
    0 => array (
        'link' => 'index',
        'title' => 'Home :)',
    ),
    1 => array (
        'link' => 'advanced',
        'title' =>  'Advanced Setting :)'
    )
);

注意

当我使用下面的代码时,它会给我这个结果但是我无法获得你在变量$mytitle上看到的标题。

class Setting extends Controller {
    public function __construct() {
        $relflection = new ReflectionClass ( get_class ( $this ) );
        $methods = $relflection->getMethods ( ReflectionMethod::IS_PUBLIC );
        if (is_array ( $methods )) {
            foreach ( $methods as $method ) {
                if ($method->class == get_class ( $this )) {
                    $breadcrumb[] = array("link" => $method->name, "title" => "???");
                }
            }
        }
        $breadcrumb = $breadcrumb;
    }

    public function index() {
        $mytitle = "Home :)";
    }

    public function advanced() {
        $mytitle = "Advanced Setting :)";
    }
}

这里的任何人都可以为我提供正确的解决方案吗?

1 个答案:

答案 0 :(得分:0)

我希望自己离你的需求不远,但这可行:

首先将您的痕迹分配给实际属性,否则将无法从构造函数的范围访问:

$this->breadcrumb = $breadcrumb;

然后从this问题,您可以设计一种方法来获取您的函数名称:

function getMyCallerName() {
  $array = debug_backtrace();
  return $array[1]['function'];
} 
// since you call a function to have your function name, the right caller will be the second function in the backtrace

你需要一个函数来从你的面包屑中获取所需的标题:

function getTitleFromLink($link) {
  foreach ($this->breadcrumb as $array) {
  if ($array['link'] == $link) return $array['title'];
  }
}

然后您可以在index()函数中使用它:

public function index() {
  $title = getTitleFromLink(getMyCallerName()); // should be "Home :)"
}
public function advanced() {
  $title = getTitleFromLink(getMyCallerName()); // should be "Advanced Setting :)"
}

然后,您可以在索引函数中添加任何您想要的逻辑

请务必将这些功能放入您的班级,否则getTitleFromLink()将无法使用breadcrumb属性