2013-11-02 25 views
4

括号里面奇怪的语法错误,我有一个简单的代码如下所示:PHP - 与类数组

 class o99_custom_fields { 
      /** 
      * @var string $prefix The prefix for storing custom fields in the postmeta table 
      */ 
      var $prefix = 'o99_'; 
      /** 
      * @var array $customFields Defines the custom fields available 
      */ 
      var $customFields = array(

       array(
        "name"   => "some_name", 
        "title"   => "some Title", 
        "description" => "Some Desctiption Text", 
        "type"   => "k_upload", 
        "scope"   => array("post"), 
        "capability" => "edit_post" 
       ), 

       array(
        "name"   => "some_name2", 
        "title"   => "some Title", 
        "description" => "Some Desctiption Text", 
        "type"   => "k_upload", 
        "scope"   => array("post"), 
        "capability" => "edit_post" 
       ), 

       array(
        "name"   => "some_name3", 
        "title"   => "some Title", 
        "description" => "", 
        "type"   => "k_textarea", 
        "scope"   => array("post"), 
        "capability" => "edit_post" 
       ), 
      ); 
... more functions and more code ... 
    } // End Class 

,一切似乎正常,

问题开始时,我试图改变一些数组值,并把它们括号内()

例如:

array(
       "name"   => "some_name", 
       "title"   => __("some Title","text_domain"),// ERROR OCCUR 
       "description" => "Some Desctiption Text", 
       "type"   => "k_upload", 
       "scope"   => array("post"), 
       "capability" => "edit_post" 
      ), 

的错误信息是:

Parse error: syntax error, unexpected '(', expecting ')' in E:\my_path\myfile.php on line 18 

注意,它是不相关的功能__()standard wordpress translation function)和误差是不相关的功能,但是SYNTAX。 (我已经使用这个功能数百名在过去的时代,没有任何问题 - 在这种情况下,也_x()_e()无法在相同的语法错误。)

我所有的括号被关闭,我已经检查并重新检查,除非我完全失明,否则我会说没问题,但我仍然得到这个错误,无论我把括号放在这个类的什么地方。

又如:这也将失败,相同的错误:

class o99_custom_fields { 
       /** 
       * @var string $prefix The prefix for storing custom fields in the postmeta table 
       */ 
       var $prefix = 'o99_'; 
       /** 
       * @var array $customFields Defines the custom fields available 
       */ 
       var $dummy_strings = array (
__('x1','text_domain'), 
__('x2','text_domain'), 
); 

    ... more functions and more code ... 
     } // End Class 

同样,错误似乎是SYNTAX相关,即使我的所有支架都关闭。 我还检查了正确的PHP开始和结束标记的文件,甚至字符集和编码(UTF-8无BOM)

我以前从来没有遇到过这样的问题 - 所以任何帮助/提示/有识之士将大大感激..

编辑我:

这些阵列后,自带的建设者..

/** 
* PHP 4 Compatible Constructor 
*/ 
function o99_custom_fields() { $this->__construct(); } 
/** 
* PHP 5 Constructor 
*/ 

function __construct() { 
    add_action('admin_menu', array(&$this, 'createCustomFields')); 
    add_action('save_post', array(&$this, 'saveCustomFields')); 
} 
+0

以及你完全正确的,这是奇怪的有:/ –

回答

6

您遇到的问题是因为您无法通过调用其他函数来初始化类属性。

初始化属性,这样的默认值:

class SomeClass{ 
... 
private $myProp0 = array(); //OK 
private $myProp1 = array('foo' => 'bar', 'foooo' => 'baaar'); //OK 
private $myProp2 = null; //OK 
private $myProp3 = 10; //OK 
private $myProp4 = "something"; //OK 
private $myProp5 = __('translate me') // NOT OK 
... 
} 

要(例如,通过调用一些其他的功能)与其他一些值初始化你的财产,你必须将其设置在类的构造函数。

像这样的东西应该工作:

function someFunction($x, $y){ 
    return "mouahahaha"; 
} 

class SomeClass{ 
    private $something = array(); 

    public function __construct(){ 
     $this->something = array(
      'somekey1' => 'foobar', 
      'somekey2' => someFunction("foo", "bar"), 
     ); 
    } 
} 

换句话说,你需要从类体移动你的阵列初始化一个构造函数。

把这个例子给自己的代码:

class o99_custom_fields { 
     /** 
     * @var string $prefix The prefix for storing custom fields in the postmeta table 
     */ 
     var $prefix = 'o99_'; 
     /** 
     * @var array $customFields Defines the custom fields available 
     */ 
     private $customFields = array(); 
     /** 
     * PHP 4 Compatible Constructor 
     */ 
     function o99_custom_fields() { $this->__construct(); } 
     /** 
     * PHP 5 Constructor 
     */ 

     public function __construct() { 

     $this->customFields = array(

      array(
      "name"   => "some_name", 
      "title"   => __("some Title","text_domain"),// NO ERROR NOW 
      "description" => "Some Desctiption Text", 
      "type"   => "k_upload", 
      "scope"   => array("post"), 
      "capability" => "edit_post" 
     ), 
     ); 
     // Do your other construct things 
    } // END __construct 
+0

请参阅Damien Pirsy的评论。函数'__()'已经声明并可用。还有,我所得到的只是一个语法错误(我也没有看到你的例子我怎么能解决它,即使我认为你是正确的方向,只需将公共结构添加到我的构造中并且错误仍然存​​在) –

+2

问题在于,你不能使用非常量或“常量值”的值来初始化**类属性**,也就是说,它必须能够在编译时进行评估,并且不能依赖运行时信息要评估“ –

+0

那么该怎么做呢? (请记住,我退出了类和PHP的新手..)我也试过这里描述的方法:http://stackoverflow.com/questions/4018413/php-how-to-put-a-variable- in-an-array?rq = 1(匿名函数和回调) –

4

我现在是你的问题的阵列是一个类属性注意;错误它不是真正帮助在这里,而是class properties阅读的手册:

[...]这个声明可能包括初始化,但这种 初始化必须是一个恒定值 - 也就是说,它必须能够在编译时对 进行评估,并且不能依赖运行时的 信息才能进行评估。

即,__()函数属于这种情况。事实上,如果它是一个正常的数组定义,它不会投的错误,请参阅本ideone

function __($param1,$param2){} 

$customFields = array(
    array(
    "name" => "some_name", 
     "title" => __("some Title","text_domain"),// ERROR OCCUR 
     "description" => "Some Desctiption Text", 
     "type" => "k_upload", 
     "scope" => array("post"), 
     "capability" => "edit_post" 
    ), 
); 

使用构造inizialize的属性;此外,关键字var应该用明确的可见性关键字取代(这里是public

+0

事实上,我怀疑它是与它是一个类的事实 - 但我还是不太明白。 1 - __()函数已经被声明并且可用2. - 我在课堂上具有构造(参见编辑I)和3。为什么一个语法错误? –