0

我想创建一种更智能的方式来创建 if 语句。我正在编写一个函数来做到这一点:

if ( ! function_exists( 'get_meta' ) ) {
    function get_meta($i) {
        $fname_name = array(
                    'copyright_text',
                    'about_name',
                    'archive_name',
                    'contact_name',
                    'lenguage_name',
                    'cc_name',
                    'about_link',
                    'archive_link',
                    'contact_link',
                    'lenguage_link',
                    'cc_link',
                    'about_editors_name',
                    'about_responsibility_name',
                    'about_joinus_name',
                    'about_editors_link',
                    'about_responsibility_link',
                    'about_joinus_link'
                    );
        foreach( $fname_name as $fname )
            include_once( get_option($fname));

        if ( $i ) return $fname_name[$i];
    }
}

但是当这个函数被调用时,它会返回这个错误:

警告:include_once() [function.include]:在第 398 行的 local\wp-content\themes\net\0.6\functions.php 中打开“what”以包含 (include_path='.;php\PEAR') 失败

基本上,只想添加get_option('');到每个数组,例如返回:

get_option('copyright_text');

或者更具体地说,返回:

get_option('copyright_text', '');

固定的:

好的,我自己解决这个问题,但我非常感谢这里的任何建议。

而不是使用foreachand include_once,我使用了一个更简单的解决方案:

if ($i) return get_option($fname_name[$i], '');
else if ($i == 0) return get_option($fname_name[0], '');
4

2 回答 2

0

这看起来像您正在创建编写访问器方法的快捷方式。看看 PHP 的魔法方法,您会有所帮助。具体注意__get、__set、__call。

http://php.net/manual/en/language.oop5.magic.php

在这种情况下,您正在执行的操作类似于以下内容:

class myClass {

    // This could be associated with whatever other data you are interested in
    private $_meta = array(
                'copyright_text',
                'about_name',
                'archive_name',
                'contact_name',
                'lenguage_name',
                'cc_name',
                'about_link',
                'archive_link',
                'contact_link',
                'lenguage_link',
                'cc_link',
                'about_editors_name',
                'about_responsibility_name',
                'about_joinus_name',
                'about_editors_link',
                'about_responsibility_link',
                'about_joinus_link'
                );

    public function __get($name) {
        if (in_array($name, $this->_meta)) {
            return $this->_meta[$name];
        }
    }
}
于 2012-10-22T15:28:46.197 回答
0

用这个

 foreach( $fname_name as $fname ){
        include_once( get_option($fname));
       if ( $i ) return $fname;
 }
于 2012-10-07T07:45:21.873 回答