Ошибка PHP и Smarty: попытка получить свойство необъекта - PullRequest
1 голос
/ 09 января 2011

Я новичок как в этом сайте, так и в изучении PHP. Я использую текст «Начало PHP5 и электронной коммерции MySQL от новичка до профессионала» Дари и Бусики для создания веб-сайта электронной коммерции. Я полагаю, что некоторые из ошибок, с которыми я столкнулся до сих пор, были связаны с обновленной базой данных (MDB2). Я смог обойти каждую ошибку, кроме этой. Код должен извлечь список отделов из моей базы данных, используя Smarty.

В последней строке я получаю сообщение об ошибке «Попытка получить свойство необъекта». У меня есть ощущение, что это связано с функцией is_array ().

<?php $_smarty_tpl->tpl_vars["load_departments_list"] = new Smarty_variable("departments_list", null, null);?>
    <table border="0" cellpadding="0" cellspacing="1" width="200">
     <tr>
      <td class="DepartmentListHead"> Choose a Sport </td>
     </tr>
     <tr>
      <td class="DepartmentListContent">
       <?php unset($_smarty_tpl->tpl_vars['smarty']->value['section']['i']);
    $_smarty_tpl->tpl_vars['smarty']->value['section']['i']['name'] = 'i';
    $_smarty_tpl->tpl_vars['smarty']->value['section']['i']['loop'] = is_array($_loop=$_smarty_tpl->getVariable('departments_list')->value->mDepartments) ? count($_loop) : max(0, (int)$_loop); unset($_loop);

Если есть что-то, что вам нужно, чтобы помочь, пожалуйста, дайте мне знать! Пожалуйста, будьте как можно более наглядны и покажите решение, используя мой код, если это возможно. Спасибо за вашу помощь! -Drew

Ответы [ 2 ]

4 голосов
/ 09 января 2011

Вы используете $_smarty_tpl->getVariable('departments_list')->value->mDepartments внутри вашей функции in_array. Убедитесь, что вы присвоили departments_list разумному объекту.

ИЛИ добавьте чек до этого

$departments_list = $_smarty_tpl->getVariable('departments_list');
if (is_object($departments_list) && is_object($departments_list->value)
         &&  $departments_list->value->mDepartments) {
    $_smarty_tpl->tpl_vars['smarty']->value['section']['i']['loop'] = is_array($_loop=$_smarty_tpl->getVariable('departments_list')->value->mDepartments) ? count($_loop) : max(0, (int)$_loop); unset($_loop);
}
0 голосов
/ 09 января 2011

Попробуйте проверить каждую переменную на тип, используя var_dump():

var_dump($_smarty_tpl->getVariable('departments_list'), $_smarty_tpl->getVariable('departments_list'))->value,
$_smarty_tpl->getVariable('departments_list'))->value->mDepartments);

Это скажет вам, какие значения типов. Проблема на самом деле не в функции is_array, а в том, что с $_smarty_tpl->getVariable('departments_list'))->value->mDepartments вы пытаетесь получить доступ к свойству объекта в двух случаях, при возвращенном значении метода getVariable() и getVariable()->value, так что два доставляют вам неприятности.

...