Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Вызов метода класса из свойства другого класса 
V
    Опции темы
Azalis
Дата 13.11.2007, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 16.3.2006
Где: Internet

Репутация: нет
Всего: нет



Добрый день!
Может поможете, проблема такая:
Есть класс, назовём его UserProfile, в котором есть private свойство userSpells, которое в свою очередь является массивом объектов класса Spell.
Заполнение массива происходит совершенно спокойно, однако при попытке обратиться из метода класса UserProfile к методу GetSpellInfo класса Spell, вылезает следующее:
Цитата

Warning: Illegal offset type in z:\home\localhost\www\game\Class\UserProfile.php on line 90
Fatal error: Call to a member function GetSpellInfo() on a non-object in z:\home\localhost\www\game\Class\UserProfile.php on line 90


В коде это выглядит так:

Код

// Файл Spell.php
class Spell
{
    private $sid;
    private $spellInfo;
    
    function __construct($sid)
    {
        $sql = "SELECT * FROM `".Utilit::$globalVars['tbl_magicBook']."` WHERE `mid`='".$sid."'";
        $result = DBQuery($sql);
        $sqlSpell = mysql_fetch_assoc($result);
        if (!$sqlSpell) $this->spellInfo = "FALSE";
        else 
        {
            $this->spellInfo = $sqlSpell;
            $this->sid = $sid;
        }
        
        mysql_free_result($result);
    }
    
    function GetSpellInfo()
    {
        return $this->spellInfo;
    }
    
    function ExecuteSpell()
    {
        // Выпонить заклинание
    }
}


Код

// Файл UserProfile.php
require_once "./Class/Spell.php";
class UserProfile implements AnyProfile
{
    private $uid;
    private $userSpells;

    function __construct($uid)
    {
        $this->uid = $uid;

        $sql = "SELECT * FROM `".Utilit::$globalVars['tbl_magicUser']."` WHERE `uid`='".$this->uid."'";
        $result3 = DBQuery($sql);
        while ($sqlSu = mysql_fetch_assoc($result3))
        {
            $i = $sqlSu['id'];
            $this->userSpells[$i] = new Spell($sqlSu['mid']);
        }
        if (empty($this->userSpells)) $this->userSpells = "NONE";
    }
    
    function GetAllSpells()
    {
        ///////////////////////////////////////////////////
        //// Вот тут вот начинается проблема
        ///////////////////////////////////////////////////
        foreach ($this->userSpells as $v => $k)
        {
            $a = $this->userSpells[$k]->GetSpellInfo();
            print $k." -> SpellId:".$a['mid']." || Name:".$a['name']." || MinLevel:".$a['min_level'];
        }
        //return $this->userSpells;
    }
}


Кто подскажет, где ошибка, буду оч благодарен!

Это сообщение отредактировал(а) Azalis - 13.11.2007, 23:23
PM MAIL WWW ICQ Skype MSN   Вверх
skyboy
Дата 14.11.2007, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



конструкция 
Код

foreach ($this->userSpells as $v => $k)

начнет перебирать массив, возвращая на каждой итерации в переменной $v - очередной ключ, а в $k- значение очередного элемента.
Следовательно, чтоб обратиться к методу элемента массива, можно сделать так:
Код

$a = $k->GetSpellInfo();

А в твоем случае ты берешь значение элемента массива(не индекс!) и пытаешься найти в массиве элемент с таким же индексом.
вот на примере:
Код

$array= array('1'-> 'Вася', 'aa'-> 'Маша');
foreach($array as $index > $value) {
 echo $array[$value].'<br />'; // вернет вполне обоснованный warning, потому как ни $array['Петя'], ни $array['Маша'] не существуют. надо было обращаться $array[$index], если уж так оота поизвращаться и не работать с $value напрямую
}

PM MAIL   Вверх
Azalis
Дата 14.11.2007, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 16.3.2006
Где: Internet

Репутация: нет
Всего: нет



Да уж, действительно дурацкая ошибка...
Спасибо! =)
PM MAIL WWW ICQ Skype MSN   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0645 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.