Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
vvsh
6 / 6 / 1
Регистрация: 29.10.2009
Сообщений: 143
1

получение свойств класса

27.08.2010, 11:32. Просмотров 1511. Ответов 5
Метки нет (Все метки)

Здравствуйте.

Есть такой код
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Cache {
    var $a = 0;
 
    function set($t) {
        $this->a = $this->a+$t;
    }
}
 
class Core {
     function a() {
          return Cache::set(3);
     }
}
 
$Core = new Core;
echo $Core->a();
когда я вызываю функцию a в классе Core, возникает ошибка
Notice: Undefined property: Core::$a

если вместо $this использовать self то возникает ошибка
Fatal error: Access to undeclared static property: Cache::$a
почему так происходит?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.08.2010, 11:32
Ответы с готовыми решениями:

Добавление css свойств в функцию print
Всем привет! Сделал на сайт форму для имени и номера телефона юзера, прикрепил...

Получение свойств объекта, как лучше организовать?
Объект может быть любым: юзер, товар, статья, да что угодно. Свойства,...

Получить константу из экземпляра класса, который является членом другого класса
class test { const STATUS = 1; } $a = new test(); echo $a::STATUS ....

Удаление свойств изображения
Здравствуйте! Делал оптимизацию изображений для web, консольная программка,...

Изменение свойств CSS
Как сделать, чтобы, например, по нажатию на кнопку/картинку менялось 1 свойство...

5
romchiksoad
1951 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,067
Записей в блоге: 2
27.08.2010, 14:16 2
vvsh, сделайте переменную $a public, а function set сделайте static. Хотя может и прокатить без public $a, но желательно указать.

Добавлено через 6 минут
Вот это должно работать:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Cache {
        public $a = 0;
 
       static function set($t) {
                $this->a = $this->a+$t;
        }
}
 
class Core {
         public function a() {
                  return Cache::set(3);
         }
}
 
$Core = new Core;
echo $Core->a();
0
Vovan-VE
13161 / 6546 / 1038
Регистрация: 10.01.2008
Сообщений: 15,070
28.08.2010, 12:05 3
Цитата Сообщение от vvsh Посмотреть сообщение
почему так происходит?
Потому что в Вашем коде $this ссылается на экземпляр класса Core. Естественно, у него нет свойства $a, вот он и ругается.

Варианты решения, в завосимости от того, что Вы хотите получить.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Cache {
        static $a = 0;
 
        static function set($t) {
                self::$a = self::$a + $t;
        }
}
 
class Core {
         function a() {
                  return Cache::set(3);
         }
}
 
$Core = new Core;
echo $Core->a();
echo Cache::$a;
или
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Cache {
        var $a = 0;
 
        function set($t) {
                $this->a = $this->a+$t;
        }
}
 
class Core {
         function a() {
                  // $b = new Cache(); // или откуда он там мог взяться
                  return $b->set(3);
         }
}
 
$Core = new Core;
echo $Core->a();

Не по теме:

Может, Вы хотели сделать наследование?

PHP
1
class Core extends Cache {

0
vvsh
6 / 6 / 1
Регистрация: 29.10.2009
Сообщений: 143
28.08.2010, 14:12  [ТС] 4
vvsh, сделайте переменную $a public, а function set сделайте static. Хотя может и прокатить без public $a, но желательно указать.
спасибо, попробую.

Потому что в Вашем коде $this ссылается на экземпляр класса Core. Естественно, у него нет свойства $a, вот он и ругается.

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


Цитата Сообщение от Vovan-VE Посмотреть сообщение
Может, Вы хотели сделать наследование?
Нет мне надо наследовать так Cache extends Core потому что Core это ядро.
0
Vovan-VE
13161 / 6546 / 1038
Регистрация: 10.01.2008
Сообщений: 15,070
28.08.2010, 17:57 5
Цитата Сообщение от vvsh Посмотреть сообщение
Нет мне надо наследовать так Cache extends Core потому что Core это ядро.
Тогда зачем Core лезет в Cache? Это противоречит принципам ООП.
0
vvsh
6 / 6 / 1
Регистрация: 29.10.2009
Сообщений: 143
28.08.2010, 23:02  [ТС] 6
Цитата Сообщение от Vovan-VE Посмотреть сообщение
Тогда зачем Core лезет в Cache? Это противоречит принципам ООП.
Просто написал для примера. Там другое имя класса.
0
28.08.2010, 23:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.08.2010, 23:02

Список несуществующих свойств обьекта
ВОпрост такой:Как получить список несуществующих свойств у обьекта? Есьт класс...

Видимость классов и их методов и свойств в IDE NetBeans
Здравствуйте, у меня не видно имена методов во всплывающем меню-подсказке,...

Если в массиве есть запись хотя бы в одном из трех свойств, то
Приветствую! Ребята, за ранее извиняюсь, что вопрос не очень корректно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru