|
0 / 0 / 0
Регистрация: 20.11.2013
Сообщений: 73
|
|||||||||||||||||||||
Получение объекта в другом классе и его использование04.11.2016, 01:44. Показов 1485. Ответов 9
Метки нет (Все метки)
Здравствуйте, не давно изучаю php, и столкнулся с такой проблемой:
Допустим есть класс Request и у него есть метод getHello(), я подключаю его к другому классу EnterExitController с помощью "use", естественно я хочу использовать объект класса Request во всех методах EnterExitController, поэтому я добавляю в класс private $request; и в конструкторе инициализирую $this->request = new Request(); , теперь как мне кажется я мог бы использовать этот объект в всех методах с помощью геттера или просто везде писать $this->request->getHello();. Но вместо этого у меня происходит ошибка:"Fatal error: Uncaught Error: Using $this when not in object context". Я знаю английский и поэтому мне в принципе понятно, что в ошибке сказано, но не понятно как это исправить?? Методы класса EnterExitController я задействую с помощью формы. Ниже код Request:
0
|
|||||||||||||||||||||
| 04.11.2016, 01:44 | |
|
Ответы с готовыми решениями:
9
Не баг ли? Объект видит приватные члены другого объекта этого же класса Свойству класса присвоить объект другого класса Если класс описан, но его объект не создан, грузится ли он в оперативу? |
|
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
|
||||||||||
| 04.11.2016, 07:38 | ||||||||||
$this->request->getHello().
Вообще из всего приведенного кода у Вас только этот кусок кода использует эти классы:
В конечном счете не понятно что не получается то ![]() Покажите код, покажите ошибку, покажите на какую из строчек представленного кода указывает эта ошибка, все.
0
|
||||||||||
|
0 / 0 / 0
Регистрация: 20.11.2013
Сообщений: 73
|
|
| 04.11.2016, 10:54 [ТС] | |
|
Вот ошибка полностью :
Fatal error: Uncaught Error: Using $this when not in object context in D:\xampp\htdocs\site.local\www\app\Contr ollers\EnterExitController.php:32 Stack trace: #0 [internal function]: App\Controllers\EnterExitController::act ionLog() #1 D:\xampp\htdocs\site.local\www\app\App.p hp(27): call_user_func(Array) #2 D:\xampp\htdocs\site.local\www\public\in dex.php(8): App\App->run() #3 {main} thrown in D:\xampp\htdocs\site.local\www\app\Contr ollers\EnterExitController.php on line 32 Я же говорю идёт использование метода класса EnterExitController через форму на сайте, она обращается к классу Router, который возвращает имя нужного класса и метода в call_user_func(). Не работает строка 32 в классе EnterExitController
0
|
|
|
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
|
|
| 04.11.2016, 11:25 | |
|
Предполагаю, что call_user_func вызывает метод статически, соответственно в методе не должно быть $this.
Добавлено через 1 минуту Можете сделать все методы и свойства статическими, тогда должно будет работать. Либо вместо call_user_func создавайте экземпляр класса и вызывайте у него метод через ->.
0
|
|
|
0 / 0 / 0
Регистрация: 20.11.2013
Сообщений: 73
|
|
| 04.11.2016, 11:56 [ТС] | |
|
Jodah, нет статики нет
Добавлено через 2 минуты Jodah, pav1uxa, мне сказали посмотреть в сторону магических методов __call() __callStatic(), может разъясните, что к чему(про эти методы)?
0
|
|
|
0 / 0 / 0
Регистрация: 20.11.2013
Сообщений: 73
|
||||||
| 04.11.2016, 13:01 [ТС] | ||||||
|
Jodah,
вот класс App целиком :
0
|
||||||
|
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
|
||
| 04.11.2016, 13:17 | ||
|
adik3dx,
Насколько я понимаю, если вы передаёте массив с названиями класса и метода, например ['Controller', 'method'], то метод вызывается статически, т.е. Controller::method().А чтобы вызвать нестатический метод, вам надо сначала создать объект, и затем передать его в этот массив. Например [new Class(), 'method'].
1
|
||
|
0 / 0 / 0
Регистрация: 20.11.2013
Сообщений: 73
|
|
| 04.11.2016, 16:55 [ТС] | |
|
Jodah, Спасибо за разъяснения, обязательно попробую реализовать передачу объекта в call_user_funс(чуть позже отпишусь что получилось), если есть что либо ещё по теме или какие то идеи по коду, буду рад узнать ваши мысли
0
|
|
|
0 / 0 / 0
Регистрация: 20.11.2013
Сообщений: 73
|
||||||
| 06.11.2016, 13:30 [ТС] | ||||||
|
Jodah, У меня получилось решить проблему с помощью __callStatic, как вы и говорили при таком использовании call_user_function как у меня метод класса вызывался статично, поэтому решение выглядит так :
0
|
||||||
| 06.11.2016, 13:30 | |
|
Помогаю со студенческими работами здесь
10
Почему объявлять класс желательно ДО его использования? Как из одного объекта получить объект другого класса? Класс не наследует свойство, если там ссылка на другой объект
Классу нужен другой объект: как правильно? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
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 .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|