Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
49 / 49 / 0
Регистрация: 20.11.2010
Сообщений: 937
1

Изменить значения полей класса без создания объекта

09.07.2016, 13:06. Показов 1895. Ответов 16
Метки нет (Все метки)

Как изменить значение поля класса, не создавая его копию?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.07.2016, 13:06
Ответы с готовыми решениями:

Вызов метода класса из сторонней функции без объявления объекта
Собственно вопрос в топике. Можно? т.е. есть некий класс MyMySQLClass() в котором прописаны...

Создание объекта без создания класса
Например мне нужно создать объект, который имеет параметр String, параметр Bool и параметр Int. Из...

Доступ к методам класса без создания объекта
Почему доступны методы foo() и bar() класса А, если нет ни одного объекта это класса? #include...

Вызвать функцию класса без создания объекта
Можно ли так сделать? Точнее я знаю что можно, но у меня не получается, я хочу чтобы вот например...

16
255 / 225 / 49
Регистрация: 23.09.2014
Сообщений: 767
09.07.2016, 13:16 2
PHP
1
2
3
4
5
6
class Foo
{
    public static $property = 'Hello';
}
 
Foo::$property = 'World';
0
49 / 49 / 0
Регистрация: 20.11.2010
Сообщений: 937
09.07.2016, 13:42  [ТС] 3
На код
PHP
1
Home_Advertiser::$offer_id = $newVal;
вот такая реакция: Access to undeclared static property: Home_Advertiser::$offer_id
Класс вот такой
PHP
1
2
3
class Home_Advertiser extends CI_Controller{
        public $offer_id;
}
Добавлено через 35 секунд
В чем может быть дело?
0
17 / 17 / 8
Регистрация: 16.01.2016
Сообщений: 55
09.07.2016, 13:55 4
Цитата Сообщение от Custos Посмотреть сообщение
public static $property = 'Hello';
в примере выше. В static и есть дело
0
49 / 49 / 0
Регистрация: 20.11.2010
Сообщений: 937
09.07.2016, 14:19  [ТС] 5
Ошибок уже нету спасибо. А как через $this изменить поле внешнего класса? Дело в том, что весь код через $this работает.
0
1562 / 1441 / 303
Регистрация: 01.10.2011
Сообщений: 2,636
09.07.2016, 14:24 6
Remdale,
PHP
1
$self
0
49 / 49 / 0
Регистрация: 20.11.2010
Сообщений: 937
09.07.2016, 14:28  [ТС] 7
А можно пример пожалуйста?
0
1562 / 1441 / 303
Регистрация: 01.10.2011
Сообщений: 2,636
09.07.2016, 14:44 8
Remdale,
PHP
1
$this->value
Заменить на
PHP
1
$self->value
0
17 / 17 / 8
Регистрация: 16.01.2016
Сообщений: 55
09.07.2016, 14:49 9
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class CI_Controller
{
    public static $myVar;
}
 
class Home_Advertiser extends CI_Controller{
        public $offer_id;
        function set()
        {
                $this->myVar = '123'; // когда $myVar не static
                static::$myVar = '123';
                parent::$myVar = '123';
        }
}
переменной $self нет
0
49 / 49 / 0
Регистрация: 20.11.2010
Сообщений: 937
09.07.2016, 15:12  [ТС] 10
А как изменить в данном случае static поле?
PHP
1
2
3
4
5
6
7
8
9
class Home_Advertiser extends CI_Controller{
    
        public static $offer_id;
 
        public static function setOfferIdValue($id){
          static::offer_id=$id; //не работает
          parent::offer_id=$id; //не работает
        }
}
0
255 / 225 / 49
Регистрация: 23.09.2014
Сообщений: 767
09.07.2016, 15:15 11
Remdale, может для начала стоит изучить основы синтаксиса?
PHP
1
2
3
4
self::$offer_id = $id;
 
// Позднее статическое связывание:
static::$offer_id = $id;
0
49 / 49 / 0
Регистрация: 20.11.2010
Сообщений: 937
09.07.2016, 15:43  [ТС] 12
Спасибо, работает. А сейчас у меня другая функция:
PHP
1
2
3
public function getForChart(){
                $offer_id = self::$offer_id;
}
Можно ли таким способом обращаться к static полю из не-static метода?
0
17 / 17 / 8
Регистрация: 16.01.2016
Сообщений: 55
09.07.2016, 17:19 13
Цитата Сообщение от Remdale Посмотреть сообщение
Можно ли таким способом обращаться к static полю из не-static метода?
можно.
0
49 / 49 / 0
Регистрация: 20.11.2010
Сообщений: 937
10.07.2016, 00:59  [ТС] 14
Ясно. Ну а сейчас самое главное:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Home_Advertiser extends CI_Controller{
 
        public static $offer_id;
 
        public static function setOfferIdValue($id){
          self::$offer_id = $id;
          static::$offer_id = $id;
        $offer_id = self::$offer_id;
        echo $offer_id;
        }
 
    public function getForChart(){
                $offer_id = self::$offer_id;
}
Вызов setOfferIdValue()
PHP
1
Home_Advertiser::setOfferIdValue($newVal);
После этого сразу идет вызов getForChart().
echo $offer_id показывает значение переменной правильно. А вот в методе getForChart() переменная $offer_id пустая. В чем может быть проблема?

Добавлено через 6 часов 19 минут
В общем пробовал я записать данные в суперглобальный массив $_POST. Из метода setOfferIdValue() данные отображаются, а вот если из getForChart(), то пусто. Как это объяснить?
0
1933 / 1762 / 822
Регистрация: 23.01.2014
Сообщений: 6,205
10.07.2016, 08:42 15
Цитата Сообщение от Remdale Посмотреть сообщение
Как это объяснить?
Это неправда.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
class A
{
    public static $offer_id;
 
    public static function setOfferIdValue($id)
    {
        static::$offer_id = $id;
        echo static::$offer_id;
    }
    
    public function getForChart()
    {
        echo static::$offer_id;
    }
}
 
A::setOfferIdValue(123);
 
(new A)->getForChart();
Выводит
Код
123123
как и должно.
0
49 / 49 / 0
Регистрация: 20.11.2010
Сообщений: 937
10.07.2016, 13:22  [ТС] 16
Все-равно 0. Мне стоило рассказать, как вызывается getForChart():
HTML5
1
<div data-source="<?=base_url();?>advertiser/getForChart" class="chart-line flot-chart"></div>
И есть строка в файле routes.php:
PHP
1
$route['advertiser/getForChart'] = "user/advertiser/home_advertiser/getForChart";
Все. Больше в проекте нигде нету getForChart. Я думаю, что создается какой-то указатель. И именно в нем и нужно менять значение.
Тогда вопрос. Как мне найти указатель, который создается при таком вызове? Вызываю через $this->getForChart($newVal), предварительно прописав public function getForChart($offer_id), появляется ошибка: Call to undefined method CI_Loader::getForChart(). В указателе $this нету такой функции. А где же тогда? И почему и суперглобальный массив $_POST тоже пустой для getForChart()?
0
1933 / 1762 / 822
Регистрация: 23.01.2014
Сообщений: 6,205
10.07.2016, 16:56 17
Цитата Сообщение от Remdale Посмотреть сообщение
Все-равно 0.
Нет.
Цитата Сообщение от Remdale Посмотреть сообщение
Мне стоило рассказать, как вызывается getForChart():
Тут он нигде не вызывается.
Цитата Сообщение от Remdale Посмотреть сообщение
Я думаю, что создается какой-то указатель.
В PHP нет никаких указателей в принципе.
Цитата Сообщение от Remdale Посмотреть сообщение
Call to undefined method CI_Loader::getForChart()
Вы же его в классе Home_Advertiser объявили, зачем вызываете в классе CI_Loader?
Цитата Сообщение от Remdale Посмотреть сообщение
И почему и суперглобальный массив $_POST тоже пустой для getForChart()?
Потому что он пустой в принципе видимо. А иначе он для getForChart() НЕ пустой.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.07.2016, 16:56

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Проверка создания объекта класса BBB из класса AAA и работа с ним
#define @param2; // объявили для выяснения случая: нужен новый или использовать существующий....

Вызов метода класса без создания экземпляра класса.
В общем мне для функционирования одной программы нужно постоянно вызывать метод одного из классов....

Задать метод в объекте класса после создания самого объекта
Есть class UC : UserControl, представляет из себя табличку, отображает разные данные и метод...

Как изменить Name у созданного объекта класса TImage?
TImage *Im = new TImage(Form1); Im&gt;Parent=Form1; Im-&gt;Name=&quot;Pole1&quot;; Как изменить имя? Когда я...


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

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

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