[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не работает замыкание в static массиве в классе
Страницы: 1, 2
Zzepish

class Validator
{
public static $validation = [
'register' => [
'name' => function($data){
return self::validateName($data);
},
'fio' => function($data){
return self::validateName($data);
}
],

'authorize' =>[
'login' => function($data){

}
,
]
];


Выдает ошибку
Parse error: syntax error, unexpected 'function' (T_FUNCTION) in C:\Users\Zzepish\Desktop\OpenServer\domains\CMS-for-phone\class\ready\universalValidator.class.php on line 6

т.е. тут: 'name' => function($data){

Если массив вынесу за пределы класса - все работает!
chee
объявление функций в свойствах? oh my god, why?

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
AllesKlar
Цитата (chee @ 26.10.2015 - 15:58)
объявление функций в свойствах? oh my god, why?

Потому что он может smile.gif

_____________
[продано копирайтерам]
Zzepish
AllesKlar
Кстати - аргумент
Zzepish
chee
Какие у тебя с этим проблемы?
Zzepish
Invis1ble
про final понял! Но без него все-равно не работает. Нафига тогда замыкания то?
Invis1ble
Цитата (Zzepish @ 26.10.2015 - 23:41)
про final понял! Но без него все-равно не работает.

там вообще-то выше еще одна ссылочка у меня в посте

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

chee
Цитата (Zzepish @ 26.10.2015 - 22:09)

Какие у тебя с этим проблемы?

ну это у тебя с этим проблемы, я не объявляю в свойствах классов анонимные функции, потому что знаю что это приведет к фатальной ошибке. Если ты читал бы, то что тебе кинул Invis1ble, то увидел бы это
Цитата
Это описание может содержать инициализацию, но инициализация должна применяться для константных значений - то есть, переменные должны быть вычислены во время компиляции и не должны зависеть от информации программы во время выполнения для их вычисления.


_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Zzepish
Шикарное решение мне подсказал volter_9! за что ему огромная благодарность!
так-же спасибо Инфизу
chee
Zzepish, ну дак что за решение то?


_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Ron
да, решение в студию!

P.s. А ТС, однако, не ищет легких путей! )))
Zzepish
chee
Создать через конструктор объекта переменную с замыканием.
Вот так
<?php
class
Validator{

private $validationArray;

public function __construct(){

$this->createValidationArray();

}

private function createValidationArray(){
$this->validationArray = [
'register' => [
'name' => [$this, 'validateName'],
'fio' => [$this, 'validateName'],
'phone' => [$this, 'validatePhone']
]
];

}


public function arrayValidator($data, $compareArrayType = null){

if(count($data)!= count($this->validationArray[$compareArrayType]))
return false;

foreach($data as $key => $value)
if(
!
isset($this->validationArray[$compareArrayType]) ||
!
$this->validationArray[$compareArrayType][$key]($value)
)

return false;

return true;
}

public static function validateName($data){
return is_string($data);
}

public static function validatePhone($data){
return is_string($data) and preg_match('#^\+[0-9]{2}\([0-9]{3}\)[0-9]{7}$#',$data);
}
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.