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 に答える