Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
1 / 1 / 0
Регистрация: 11.11.2014
Сообщений: 13

Обращение к несуществующей функции переменной класса

06.06.2016, 10:03. Показов 2790. Ответов 16

Студворк — интернет-сервис помощи студентам
Доброго времени суток.

предположим существует класс, к переменной которого можно обратиться так: $myClass->variar, и она будет возвращать какое то число, например 3, которое можно использовать для различных действий, складывать вычитать присваивать, выводить и т д,

Внимание вопрос: возможна ли в php реализация класса, такая, что можно было бы при этом вызывать функцию следующим способом $myClass->variar->getAll();
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.06.2016, 10:03
Ответы с готовыми решениями:

Обращение из класса А к переменной класса В (и сохранение новых данных)
Добрый день уважаемые специалисты, пару раз находил подобные темы на форуме, но к сожалению не смог применить в своем случае( поэтому сразу...

Обращение к переменной из другого класса
Как обратиться к переменной из другого класса?

Обращение к переменной созданного класса
Понимаю, что все уже изъезжено по 100 раз, но в упор не могу понять следующую вещь! У меня есть отдельный класс Main: using System; ...

16
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
06.06.2016, 12:26
Реализовать магические методы __get(), __set(), __isset()
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
06.06.2016, 15:59
Цитата Сообщение от reqyz Посмотреть сообщение
Внимание вопрос: возможна ли в php реализация класса, такая, что можно было бы при этом вызывать функцию следующим способом $myClass->variar->getAll();
Можно, если variar это объект класса, у которого есть публичный метод getAll()
0
 Аватар для Svid_off
82 / 82 / 38
Регистрация: 15.03.2013
Сообщений: 280
06.06.2016, 16:57
Можно, если variar это объект класса, у которого есть публичный метод getAll()
А как этот объект можно будет
использовать для различных действий, складывать вычитать присваивать, выводить и т д,
?
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
06.06.2016, 19:53
Цитата Сообщение от Svid_off Посмотреть сообщение
А как этот объект можно будет
Никак Перегрузки операторов (сложения, вычитания, и т.д.) объектов в чистом PHP на сколько я понимаю нету.
0
 Аватар для Svid_off
82 / 82 / 38
Регистрация: 15.03.2013
Сообщений: 280
07.06.2016, 11:07
Лучший ответ Сообщение было отмечено reqyz как решение

Решение

Конечно, можно мрачно извратиться как-нибудь так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class A{
    private $selfValue;
    public function __construct($value){
        $this->selfValue = $value;
    }
 
    public function __get($name) {
     $this->$name = new $this(null);
        return $this->selfValue;
    }
    
    public function __call($name, array $arguments){
        return $arguments;
    }
}
 
$a = new A(5);
echo $a->variar +7;
var_dump($a->variar->getAll([1,7,3,2]));
1
wq
85 / 78 / 32
Регистрация: 26.11.2015
Сообщений: 481
07.06.2016, 15:42
Цитата Сообщение от Svid_off Посмотреть сообщение
$this->$name = new $this(null);
браво. Вы сами-то эту бредятину запускали?
0
 Аватар для Svid_off
82 / 82 / 38
Регистрация: 15.03.2013
Сообщений: 280
07.06.2016, 17:09
браво. Вы сами-то эту бредятину запускали?
Не оспаривая "бредятину", у меня встречный вопрос: а Вы запускали?

Добавлено через 1 час 18 минут
Судя по молчанию, видимо, запустили
1
wq
85 / 78 / 32
Регистрация: 26.11.2015
Сообщений: 481
07.06.2016, 19:51
Цитата Сообщение от Svid_off Посмотреть сообщение
Судя по молчанию, видимо, запустили
ваш бред отнимает время. Ну пришлось потратить для интереса:
Fatal error: Allowed memory size of
покажите пример из php-мануаля где этот костыль применяется и с какой целью. Если это хаккерская дыра - багрепорт нунжно писать если вы не жулик

Добавлено через 34 минуты
Цитата Сообщение от Svid_off Посмотреть сообщение
PHP
1
2
3
4
public function __get($name) {
    $this->$name = new $this(null);
    return $this->selfValue;
}
сначала-то и не понял. Просто обратил внимание на синтаксический бред. А тут оказалось: бред рекурсивный. При каждом обращении - попытка создать объект. Новый объект. Сколько таких объектов может быть создано в программе? Ровно столько сколько раз будет обращение к свойству. Хорошо, что это именно попытка, а не создание. Осуществляется она с помощью синтаксически бредовой конструкции. Извините, Svid_off, вы в ООП - [на мой предвзятый взгляд плохо разбираетесь]

 Комментарий модератора 
wd, аккуратнее с выражениями.
0
 Аватар для Svid_off
82 / 82 / 38
Регистрация: 15.03.2013
Сообщений: 280
08.06.2016, 09:41
Fatal error: Allowed memory size of
Киньте ссылку на песочницу что-ли, так будет очевидно и мне, и Вам.
Я в свою очередь кидаю ссылку Вам - вот

Я еще раз повторю, если Вы не обратили внимание с первого раза, что перед тем, как привести этот пример, написал:" можно мрачно извратиться". Этот пример ни на что не претендует, кроме как на формальное соответствие тому, о чем написал ТС, и с самого начала я позиционировал его как шутку.С Вами в спор я вступил исключительно из-за
Вы сами-то эту бредятину запускали?
.
Давай просто выясним, запускается ли он или нет
1
wq
85 / 78 / 32
Регистрация: 26.11.2015
Сообщений: 481
08.06.2016, 19:17
Svid_off, ценю вашу напористость и хамоустойчивость. !! Времени нет обсуждать.лично меня интересует фишка new $this. Это химия? И результат запускания я выложил. Переполнение памяти

Добавлено через 8 минут
И эта.. не хотел я ругаться.
1
 Аватар для Svid_off
82 / 82 / 38
Регистрация: 15.03.2013
Сообщений: 280
09.06.2016, 09:42
И эта.. не хотел я ругаться.

лично меня интересует фишка new $this
это просто new self(), ну или в данном случае new A()
1
wq
85 / 78 / 32
Регистрация: 26.11.2015
Сообщений: 481
09.06.2016, 20:15
Цитата Сообщение от Svid_off Посмотреть сообщение
это просто new self(), ну или в данном случае new A()
ну так это абсолютно нормальная конструкция для php. Возможно вы опечатались именно с этим "new $this".self,static - пожалуйста. Я не нашел в мануале ничего такого про $this. Хотя! Если класс реализует __toString(), которая в свою очередь возвращает имя класса - возможно ваша фишка прокатит. Но проверять не буду- лениво
1
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
09.06.2016, 21:58
Цитата Сообщение от wq Посмотреть сообщение
Я не нашел в мануале ничего такого про $this
Похоже что это работает и даже без toString http://ideone.com/iF2riI
1
 Аватар для Svid_off
82 / 82 / 38
Регистрация: 15.03.2013
Сообщений: 280
09.06.2016, 23:22
Возможно вы опечатались именно с этим "new $this"
Когда писал код, думал над одной проблемой на javascript'е вот и появилось это $this, сразу внимания не обратил, а так как писал в песочнице и он оказался работоспособным, то и дальше не обратил внимания, пока Вы не написали.
Я тоже потом в мануале не нашел ничего, чтобы объясняло это поведение, хотя интуитивно, мне кажется, что такое поведение нормально (особенно для пыхи)
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
10.06.2016, 05:48
Цитата Сообщение от wq Посмотреть сообщение
ну так это абсолютно нормальная конструкция для php. Возможно вы опечатались именно с этим "new $this".self,static - пожалуйста. Я не нашел в мануале ничего такого про $this
Надеюсь php.net/manual достаточно авторитетный мануал
http://php.net/manual/en/language.oop5.basic.php
PHP
1
2
3
4
5
class Test
{
}
$obj1 = new Test();
$obj2 = new $obj1;
Здесь new $obj1 фактически то же самое что и использование new $this внутри нестатического метода класса.
2
 Аватар для Svid_off
82 / 82 / 38
Регистрация: 15.03.2013
Сообщений: 280
10.06.2016, 09:34
Точно! Ну теперь гештальт завершен))).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.06.2016, 09:34
Помогаю со студенческими работами здесь

Обращение к переменной одного класса из другого
есть 2 класса Первый public partial class Login_form : Form { public int paramettr_avt; public...

Обращение к переменной, являющейся членом класса
class Zag // первый файл Header.h { public: int course ; Zag() { course = 0; } };

Обращение к вызывающей переменной в методе класса
Как работать с переменной (ее полями), которая вызвала метод в c#? Изучаю недавно, пересаживаюсь с pascal. В pascal если мы вызываем...

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

Чтение несуществующей переменной
ой ли так ничего и не выведет?


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru