它正在吐出synatx错误与cdoe.can的这一部分你请告诉我这段代码有什么问题
class House{
private $color;
public function paint($color){
$ret_col = create_function("\$color", "Painting with the color \$color");
return $ret_col;
}
}
$hs = new House();
$col = $hs->paint('red');
echo $col;
解析错误:语法错误,test.php中的意外T_STRING(37)第1行的运行时创建的函数
答案 0 :(得分:4)
如果您使用PHP 5.3,请不要使用create_function
。而是使用PHP的closures。它们允许在读取文件时检查内部代码,而不是在执行文件时检查内部代码,并且通常更安全。此外,您必须执行闭包以从中获取值,您不能简单地将其类型转换为字符串。
class House{
private $color;
public function paint($color){
$ret_col = function() use ($color) { //use a closure
return "Painting with the color $color";
};
return $ret_col;
}
}
$hs = new House();
$col = $hs->paint('red');
echo $col(); //not just $col
答案 1 :(得分:3)
您的函数体是无效的Php代码。
也许你应该写它
class House{
private $color;
public function paint($color){
$ret_col = create_function("\$color", "return \"Painting with the color \$color\";");
return $ret_col;
}
}
$hs = new House();
$col = $hs->paint('red');
echo $col();
编辑:修正了Rocket指出的col错误。
而且Kendal Hopkins的封闭示例实际上是php 5.3 +的一种更好的方式。
答案 2 :(得分:1)
create_function的第二个参数必须是有效的PHP字符串。 你应该做点什么:
create_function("$color", 'return "Painting with the color" . $color;');
此外,您还有另一个错误:当您执行return $ret_col;
时,您将返回lambda函数而不是lambda函数的返回值,因此您必须更正代码:
class House{
private $color;
public function paint($color){
$ret_col = create_function("$color", 'return "Painting with the color" . $color;');
return $ret_col;
}
}
$hs = new House();
$col = $hs->paint('red');
echo $col();
注意echo $col
答案 3 :(得分:0)
你无法执行
Painting with the color $color
但你可以
$ret_col = create_function('$color', 'return "Painting with the color ".$color;');