Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (2) [1] 2  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Проблема с вызовов статических методов
Zzepish  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 5583
Пользователь №: 32538
На форуме: 5 лет, 1 месяц, 25 дней
Карма: 56




Есть класс:
class EntityValidator
{
protected static $log = [];
public static function validateArrayFromUser(array $arrayToCheck, array $errorTypesLog){
foreach($errorTypesLog as $key=>$value){
if(!isset($arrayToCheck[$key]))
self::$log[] = ['2',$value['notSet']];
elseif(!(self::$value['type']($errorTypesLog[$key]))){
self::$log[] = ['2',$value['notCorrect']];
}
}


return self::$log;
}
public static function ip(string $ip)
{
return (filter_var($ip, FILTER_VALIDATE_IP) && self::string($ip));
}

public static function string(string $string){
return is_string($string);
}
}


При попытке заюзать validateArrayFromUser, выдает ошибку на эту строку:
Цитата
elseif(!(static::$value['type']($errorTypesLog[$key]))){

Цитата
<b>Fatal error</b>:  Uncaught Error: Access to undeclared static property: modules\Zzepish\validator\classes\EntityValidator::$value

Кто вкурсе- в чем косяк?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
casper - gg  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Абориген
*****

Профиль
Группа: Пользователь
Сообщений: 216
Пользователь №: 42190
На форуме: 1 год, 7 месяцев, 16 дней
Карма: 10




а вызов точно такой должен быть? не такой:
.....::$log['type']($errorTypesL.....


Это сообщение отредактировал casper - gg - 25.04.2016 - 20:54
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Zzepish  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 5583
Пользователь №: 32538
На форуме: 5 лет, 1 месяц, 25 дней
Карма: 56




casper - gg
100%. Я имею массив вида:
$arrayLog = [
'domain_ip'=>[
'notSet'=>'Поле domain_ip не было переданно!',
'notCorrect'=>'Не верный формат названия сайта!',
'type'=>'ip'
],
'domain_name'=>[
'notSet'=>'Поле domain_name не было переданно!',
'notCorrect'=>'Не верный формат названия сайта!',
'type'=>'string'
],
'domain_description'=>[
'notSet'=>'Поле domain_ip не было переданно!',
'notCorrect'=>'Не верный формат описания сайта!',
'type'=>'string'
],
];



Я $arrayLog передаю на место $errorTypesLog.

$validationResult = EntityValidator::validateArrayFromUser($this->inputData['POST'],$arrayLog)
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
casper - gg  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Абориген
*****

Профиль
Группа: Пользователь
Сообщений: 216
Пользователь №: 42190
На форуме: 1 год, 7 месяцев, 16 дней
Карма: 10




Ну просто вот перевод ошибки:
Цитата
Не пойманная ошибка: доступ к не объявленному статическому свойству: путь::$value


... то есть у тебя в коде статическое свойство появилось вдруг в проверке из ни откуда похоже.

может туда self:: случайно попала
elseif(!($value['type']($errorTypesLog[$key]))){


Это сообщение отредактировал casper - gg - 25.04.2016 - 21:05
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Zzepish  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 5583
Пользователь №: 32538
На форуме: 5 лет, 1 месяц, 25 дней
Карма: 56




casper - gg
я знаю перевод. Я не могу понять - почему она возникает? Ведь статические методы и свойства создаются при подключении кода, по идее
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
casper - gg  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Абориген
*****

Профиль
Группа: Пользователь
Сообщений: 216
Пользователь №: 42190
На форуме: 1 год, 7 месяцев, 16 дней
Карма: 10




Цитата (Zzepish @ 25.04.2016 - 21:03)
Ведь статические методы и свойства создаются при подключении кода, по идее

не, не так, свойства если нет, то его нет, нужно вызвать метод, который создаст это свойство.

просто методы вызываются без объявления класса, вот и вся загадка статики.

Это сообщение отредактировал casper - gg - 25.04.2016 - 21:09
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









перепись нубов мидлов окончена? rolleyes.gif
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1967
Пользователь №: 38654
На форуме: 3 года, 6 месяцев, 18 дней
Карма: 46




Цитата (Guest @ 25.04.2016 - 21:17)
перепись нубов мидлов окончена?

laugh.gif


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

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
casper - gg  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Абориген
*****

Профиль
Группа: Пользователь
Сообщений: 216
Пользователь №: 42190
На форуме: 1 год, 7 месяцев, 16 дней
Карма: 10




Guest chee, смайлики это сильно tongue.gif
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Zzepish  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 5583
Пользователь №: 32538
На форуме: 5 лет, 1 месяц, 25 дней
Карма: 56




casper - gg
Ясно. Тогда придется пилить синглтон.
Эх, а хотелось более простой вариант biggrin.gif
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Zzepish  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 5583
Пользователь №: 32538
На форуме: 5 лет, 1 месяц, 25 дней
Карма: 56




casper - gg
решил проблемы таким способом:
        foreach($errorTypesLog as $key=>$value){
$method = $value['type'];
if(!isset($arrayToCheck[$key]))
self::$log[] = ['2',$value['notSet']];
elseif(!(self::$method($arrayToCheck[$key]))){
self::$log[] = ['2',$value['notCorrect']];
}
}
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
casper - gg  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Абориген
*****

Профиль
Группа: Пользователь
Сообщений: 216
Пользователь №: 42190
На форуме: 1 год, 7 месяцев, 16 дней
Карма: 10




Zzepish логично biggrin.gif
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
tceburashka.com  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 21
Пользователь №: 42890
На форуме: 1 год, 2 месяца, 25 дней
Карма: 2




Аха-ха! Привет всем! Уважаемый вы вызываете статическую переменную класса, которая отсутствует. Нужно было объявить:
private static $value = [];
Или уже вызывать метод через call_user_func


--------------------
Парсинг - автоматизация ручной работы. http://tceburashka.com
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
tceburashka.com  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 21
Пользователь №: 42890
На форуме: 1 год, 2 месяца, 25 дней
Карма: 2




А вообще Ваша конструкция не безопасна, потому как Вызывает неизвестные методы и ведет либо к ошибкам, либо чего хуже нарушению безопасности. Надо всегда фильтровать ввод ... по крайней ограничивать, что должно быть там... Ну и хотелось бы из личного опыта подсказать... Статические штучки лучше применять на методах, а свойства лучше не делать статическими, только в редких случаях. Тогда масштабируемость и гибкость будет у класса. В основном это значения по умолчанию.


--------------------
Парсинг - автоматизация ручной работы. http://tceburashka.com
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Zzepish  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 5583
Пользователь №: 32538
На форуме: 5 лет, 1 месяц, 25 дней
Карма: 56




tceburashka.com
$value - не статическое свойство. Либо я не правильно понимаю систему. $value генерируется в самом foreach
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (2) [1] 2  Ответ в темуСоздание новой темыСоздание опроса