что не так с этим PHP-кодом - PullRequest
       16

что не так с этим PHP-кодом

0 голосов
/ 14 февраля 2011

Это ошибка синтаксиса с этой частью cdoe. Можете ли вы сказать мне, что не так с этим кодом

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;

Ошибка разбора: синтаксическая ошибка, неожиданный T_STRING в test.php (37)созданная во время выполнения функция в строке 1

Ответы [ 4 ]

4 голосов
/ 14 февраля 2011

Если вы используете PHP 5.3, не используйте create_function.Вместо этого используйте PHP замыкания .Они позволяют проверять внутренний код при чтении файла, а не когда он выполняется и часто безопаснее.Кроме того, вы должны выполнить замыкание, чтобы получить значение из него, вы не можете просто ввести его в строку.

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
3 голосов
/ 14 февраля 2011

Ваше тело функции не является действительным кодом 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();

Редактировать: Исправлена ​​ошибка col, указанная Ракетой.

А также пример закрытия, который есть у Кендала Хопкинса, на самом деле является более хорошим способомphp 5.3 +.

1 голос
/ 14 февраля 2011

Второй аргумент create_function должен быть допустимой строкой PHP.Вы должны сделать что-то вроде:

create_function("$color", 'return "Painting with the color" . $color;');

, кроме того, у вас есть другая ошибка: когда вы делаете return $ret_col;, вы возвращаете лямбда-функцию, а не возвращаемое значение лямбда-функции, поэтому вы должны исправить свой код:

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

0 голосов
/ 14 февраля 2011

Вы не можете выполнить

 Painting with the color $color

но вы можете

 $ret_col = create_function('$color', 'return "Painting with the color ".$color;');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...