Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Не срабатывает проверка if.
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Не срабатывает проверка if.

Страниц (1): [1]
 

1. muravey - 13 Мая, 2013 - 14:27:07 - перейти к сообщению
Доброго времени суток!

Есть значение
...
PHP:
скопировать код в буфер обмена
  1.  
  2.  [mBlockLeft] => Array
  3.                         (
  4.                             [0] => Array
  5.                                 (
  6.                                     [value] => CMS
  7.  
  8.                                     [title] => Система Управления Сайтом
  9.  
  10.                                     [page] => Cms
  11.  
  12.                                     [file] => cms
  13.                                 )
  14.  
  15.                             [1] => Array
  16.                                 (
  17.                                     [value] => Пример
  18.  
  19.                                     [title] => iTamiT FrameWork
  20.  
  21.                                     [page] => Examples
  22.  
  23.                                     [file] => examples
  24.                                 )
  25.  
  26.                         )
  27.  
  28.                     [mMain] => Examples
  29.  + Examples
  30.                     [mActived] => Examples
  31.                 )
  32.  

...

КОД
PHP:
скопировать код в буфер обмена
  1.  
  2. // Если значение Page не задано явно, подразумеваем страницу Examples
  3.             $admin_page = isset ($_GET['page']) ? $_GET['page'] : 'Examples';
  4.            
  5.             $this->mActived = $admin_page;
  6.      
  7.             if (!empty($this->mBlockLeft))
  8.             {
  9.                 foreach ($this->mBlockLeft as $key => $val)
  10.                 {
  11.                     $this->mMain = $this->mBlockLeft[$key]['page'].' + '.$admin_page;
  12.                     // Выбираем какую страницу администрирования загружать ...
  13.                     if ($admin_page == $this->mBlockLeft[$key]['page'])
  14.                     {
  15.                         $this->mMain = 'admin_'.$this->mBlockLeft[$key]['file'].
  16.                                        '/admin_'.$this->mBlockLeft[$key]['file'].'.tpl';
  17.                     }    
  18.                 }
  19.             }
  20.  


В итоге $this->mMain должен иметь значение 'admin_examples/admin_examples.tpl'
Но такого не происходит, почему?
(Добавление)
Как может повлиять на сравнение простой переменной и свойством объекта, на false или true?
2. avtor.fox - 13 Мая, 2013 - 15:22:42 - перейти к сообщению


проверяйте данные. код смотреть - неинтересно
3. muravey - 13 Мая, 2013 - 15:38:54 - перейти к сообщению
avtor.fox пишет:

проверяйте данные. код смотреть - неинтересно


ПРОВЕРЯЮ

PHP:
скопировать код в буфер обмена
  1.  
  2. var_dump($admin_page);
  3. var_dump($this->mBlockLeft[$key]['page']);
  4.  


ВЫДАЛ

PHP:
скопировать код в буфер обмена
  1.  
  2. string(3) "Cms"
  3.  


Что мне делать с этим?
4. avtor.fox - 13 Мая, 2013 - 15:42:27 - перейти к сообщению
muravey, вот Вам и ответ.

(А ещё, я буду добрым волшебником и подскажу, что указатель $this работает только внутри тела класса)
5. muravey - 13 Мая, 2013 - 15:48:25 - перейти к сообщению
avtor.fox пишет:
muravey, вот Вам и ответ.

(А ещё, я буду добрым волшебником и подскажу, что указатель $this работает только внутри тела класса)


Т.е. вы имеете ввиду что

PHP:
скопировать код в буфер обмена
  1.  
  2. class AdminHome
  3. {
  4.     ......
  5.     // Определяем файл шаблона
  6.     public $mBlockLeft;
  7.    .....
  8.  
  9.    public function init()
  10.     {
  11.  
  12.          //ЗДЕСЬ КОД КОТОРЫЙ ВЫШЕ
  13.  
  14.     }
  15.  
  16. }
  17.  


Ну и что я делаю не так добрый волшебник? )
(Добавление)
Почему переменная выводит в дампе string(3)?
6. imya - 13 Мая, 2013 - 16:08:39 - перейти к сообщению
$this выводите внутри класса и увидите что в нём.

string(3) выводит, потому что CMS - строка, в которой 3 символа Подмигивание (КЭП)
7. muravey - 13 Мая, 2013 - 16:16:37 - перейти к сообщению
Нашел причину, прогнал данные через цикл и каким то образом
добавляется пробел в конце



PHP:
скопировать код в буфер обмена
  1.  
  2. string(8) "Examples" string(5) "Cms " string(8) "Examples" string(10) "Examples "
  3.  


Потому и сравнение не сработало. Откуда взялся пробел? Весь код перешарил нет его.

trimom убрал и все заработало.

Откуда взялся пробел? Это что какойто баг в OOП PHP?
8. imya - 13 Мая, 2013 - 16:22:06 - перейти к сообщению
muravey пишет:


Откуда взялся пробел? Это что какойто баг в OOП PHP?

Радость
Скорее баг в вашем коде

 

Powered by ExBB FM 1.0 RC1