Php 字符串中的字符串数组
为什么这是一个编译错误:Php 字符串中的字符串数组,php,arrays,Php,Arrays,为什么这是一个编译错误: <?php class Bean { public $text = array("123", "456"); public $more = array("000 {$this->text[0]} 000", "--- {$this->text[1]} ---"); } ?> 编译器说PHP解析错误:语法错误,意外' 如何在其他数组中使用我的文本数组?您在该行中的操作: public $more = array("000
<?php
class Bean
{
public $text = array("123", "456");
public $more = array("000 {$this->text[0]} 000", "--- {$this->text[1]} ---");
}
?>
编译器说PHP解析错误:语法错误,意外'
如何在其他数组中使用我的文本数组?您在该行中的操作:
public $more = array("000 {$this->text[0]} 000", "--- {$this->text[1]} ---");
在PHP中不起作用
在这里,您可以看到该示例中属性的有效值和无效值。因此,如果您使用双引号,请尝试解析字符串
因此,您必须将您的“
替换为”
,然后它就可以工作了
public $more = array('000 {$this->text[0]} 000)', '(--- {$this->text[1]} ---)');
例如,您可以在该变量中设置占位符,并在需要它们之前将其替换为
vsprintf
。在该行中执行的操作:
public $more = array("000 {$this->text[0]} 000", "--- {$this->text[1]} ---");
在PHP中不起作用
在这里,您可以看到该示例中属性的有效值和无效值。因此,如果使用双引号,请尝试解析字符串
因此,您必须将您的“
替换为”
,然后它就可以工作了
public $more = array('000 {$this->text[0]} 000)', '(--- {$this->text[1]} ---)');
例如,您可以在该变量中设置占位符,并在需要它们之前将其替换为vsprintf
。您可以执行以下操作:
class Bean
{
public $text = array("123", "456");
public function fillMore () {
$more = array();
$more[0] = "000 ".$this->text[0]." 000";
$more[1] = "000 ".$this->text[1]." 000";
var_dump($more);
}
}
$bean = new Bean();
$bean->fillMore();
或者,您也可以尝试在构造函数中填充$more
。
初始化类时,这将使您的$more
。您可以执行以下操作:
class Bean
{
public $text = array("123", "456");
public function fillMore () {
$more = array();
$more[0] = "000 ".$this->text[0]." 000";
$more[1] = "000 ".$this->text[1]." 000";
var_dump($more);
}
}
$bean = new Bean();
$bean->fillMore();
或者,您也可以尝试在构造函数中填充$more
。
当您初始化类时,这将使您的
$more
。如前所述,当前版本的php无法(直接)这样做。即使PHP5.6的新功能也不允许这样做,请参见但我们假设您在这方面有一个有效的intrest,例如,将某些内容保留/分组在类中更具声明性的部分,而不是将其隐藏在一堆代码中,您可以做一些事情(可能“有点”更复杂;-)如
如前所述,当前版本的php无法(直接)做到这一点。即使是PHP5.6的新功能也不允许这样做,请参见
但我们假设您在这方面有一个有效的intrest,例如,将某些内容保留/分组在类中更具声明性的部分,而不是将其隐藏在一堆代码中,您可以做一些事情(可能“有点”更复杂;-)如
第5行应该是public$more=array(“000{.$this->text[0]。“}000”,“--{.$this->text[1]。“}--”);
这不起作用。我检查了IDEONE,我认为您无法在当前版本的php中使用它。尽管关于“必须是常量值”的一些限制“-规则已在最新的php版本中删除。。。。像这样。。。我不这么认为。请参阅“常量表达式”相同的概念,您应该能够动态填充数组。这是一件很令人费解的事。我想知道为什么这不起作用。第5行应该是public$more=array(“000{”。$this->text[0]。“}000”,“--{”。$this->text[1]。”}--”代码>这不起作用。我检查了ideoneI,我不认为您可以在当前版本的php中使用它。尽管一些关于“必须是常量值”的限制,但在最新的php版本中已经删除了该规则。。。。像这样。。。我不这么认为。请参阅“常量表达式”相同的概念,您应该能够动态填充数组。这是一件很令人费解的事。我想知道为什么这不起作用。所以基本上我不能在这些字符串中使用变量?您只能设置标量值。
,这不是真的。数组不是标量,但您仍然可以使用它。是的,很抱歉,它是错误的单词。我试图在文档中找到描述它的部分,但我找不到。因此基本上我不能在这些字符串中使用变量?您只能设置标量值。
,这是不正确的。数组不是标量,但您仍然可以使用它。是的,很抱歉,它是错误的单词。我试图在文档中找到描述它的部分,但我找不到。这个“稍微复杂一点”的答案很有趣。我在哪里可以找到有关heck%1$s所做工作的文档?vsprintf
是否可以使用双引号@penu:在PHP文档中搜索vsprintf
或sprintf
。该格式记录在“格式字符串支持参数编号/交换[…]”处/之后。sprintf()和vsprintf()(或任何其他函数?)都不关心单引号或双引号字符串文本。这种魔力发生在函数调用之前,函数本身只得到一个字符串的(内部)表示形式,不管这种表示形式是如何产生的。在最近的一个项目中,我有一点类似……并决定通过代码生成(使用cumstom构建步骤)而不是“在”代码中解决它。它身上有某种代码的味道,但我现在无法确定。。。。。只是一种感觉。这个“稍微复杂一点”的答案很有趣。我在哪里可以找到有关heck%1$s所做工作的文档?vsprintf
是否可以使用双引号@penu:在PHP文档中搜索vsprintf
或sprintf
。该格式记录在“格式字符串支持参数编号/交换[…]”处/之后。sprintf()和vsprintf()(或任何其他函数?)都不关心单引号或双引号字符串文本。这种魔力发生在函数调用之前,函数本身只得到一个字符串的(内部)表示形式,不管这种表示形式是如何产生的。在最近的一个项目中,我有一点类似……并决定通过代码生成(使用cumstom构建步骤)而不是“在”代码中解决它。它身上有某种代码的味道,但我现在无法确定。。。。。只是一种感觉。