php7 грешка

teroristd

Registered
Здравейте, опитвам се да подкарам някои кодове от php 5.6 на php 7, но ми дава грешка. Ето какво имам, което си работеше но сега дава грешка.

Код:
В клас Validation
public function setRule($rule, $value, $params = NULL, $name = NULL) {

        $this -> _rules[] = array('val' => $value, 'rule' => $rule, 'par' => $params, 'name' => $name);

        return $this;
    }

В някакъв модел примерно

$this -> _validation -> setRule('alpha', $firstName, '', 'latin');

Грешката е Function name must be a string in:
Четох в http://stackoverflow.com/questions/34506185/php7-method-exists-uncaught-error-function-name-must-be-a-string и пише че има някакви промени за този случай но нещо не мога да се ориентирам какво точно да преправям.
 
Сори грешката всъщност е от метода validate().

Код:
public function validate() {

        if (count($this->_rules) > 0) {

            foreach ($this->_rules as $val) {

                if (!$this-> $val['rule']($val['val'], $val['par'])) {

                    if ($val['name']) {

                        $this->_errors[] = $val['name'];
                    } else {

                        $this->_errors[] = $val['rule'];
                    }
                }
            }
        }

        return (bool)!count($this->_errors);
    }
 
Еми значи слагаш скобите аналогично на примера в stackoverflow.

Indirect access to variables, properties, and methods will now be evaluated strictly in left-to-right order, as opposed to the previous mix of special cases
Явно като са сменили приоритета в php7 се поллучава тази грешка, и ти трябва да enforceнеш старото поведение с explicit скоби.

В твоя код това е този ред:

if (!$this-> $val['rule']($val['val'], $val['par'])) {
 
Благодаря, така работи. Виждал съм няколко пъти в нета този синтаксис с къдравите скоби, но никъде не мога да открия кога и защо се използва. Ако може малко инфо?
 
teroristd каза:
Благодаря, така работи. Виждал съм няколко пъти в нета този синтаксис с къдравите скоби, но никъде не мога да открия кога и защо се използва. Ако може малко инфо?

В SO линка, който си пуснал е написано и тук:

http://php.net/manual/en/migration70.incompatible.php#migration70.incompatible.variable-handling.indirect
 

Back
Горе