Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
10 / 7 / 3
Регистрация: 04.07.2019
Сообщений: 94

Свойство, как объект

09.07.2019, 16:52. Показов 1641. Ответов 13

Студворк — интернет-сервис помощи студентам
PHP
1
public $site = (object)[];
при попытке начать заполнять свойство -
PHP
1
$this->site->description = '...';
получаем Fatal error: Constant expression contains invalid operations


вот так работает
PHP
1
2
3
4
5
6
public $site;
 
public function __construct()
{
    $this->site = (object)[];// можно заполнять, как и при new stdClass()
}
поясните
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.07.2019, 16:52
Ответы с готовыми решениями:

Добавить в уже существующий объект свойство и положить в него объект
У меня имеется такая вложенность в редьюсере initialState = { prop1: { props2: { prop3: {id:...

Ссылка на объект как свойство класса
Добрый вечер. Есть 2 класса: сотрудники и компании. Если использовать БД то вопрос бы решался очень просто, он почитав не много понял...

Объект как свойство или как оно делается
Схема примерно такова class Upper { } class Lower { }

13
 Аватар для Сергей1980
547 / 377 / 16
Регистрация: 17.12.2009
Сообщений: 991
09.07.2019, 18:20
У вас в кучу все, конструктор класса без класса, публичные переменные выдаваемые за класс, и попытка обратится к текстовой переменной как к объекту. Что вы хотите получить на выходе?

Добавлено через 1 час 7 минут
Немного непонятно, чего вы хотите , но все же... думаю вы хотите загонять объект в переменную а потом обращаться к этому объекту не создавая нового экземпляра класса, наверное как то так..

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class SomeClass{
// объявляем приватную статичную переменную
   private static $site = (object)[];
 
// пишем конструктор класса при обращении к которому вноситься в экземпляр класса ваша переменная
public function _construct($site){
this->site=$site;
 
}
 
// пишем функцию, которая возвращает объект 
 
 public static  function getSite() {
      return $site;
   }
 
}
0
10 / 7 / 3
Регистрация: 04.07.2019
Сообщений: 94
09.07.2019, 18:34  [ТС]
как сказал бы один из профи этого раздела - дичь
0
 Аватар для Сергей1980
547 / 377 / 16
Регистрация: 17.12.2009
Сообщений: 991
09.07.2019, 18:49
Цитата Сообщение от Вероломство Посмотреть сообщение
как сказал бы один из профи этого раздела - дичь
это раздел для начинающих) Начинающих в PHP. В php я начинающий, а вот в ООП нет))
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
09.07.2019, 19:21
Вероломство, не все операции доступны при объявлении свойства. Подробней читайте тут.
0
10 / 7 / 3
Регистрация: 04.07.2019
Сообщений: 94
09.07.2019, 19:27  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
Подробней читайте тут
там нет пояснения на пост 1

Добавлено через 2 минуты
Сергей1980, ну вы там сами накосячили, объявили статику, но обращаетесь через $this, а не self::, return вообще прекрасен

кстати this со статикой вроде ещё проскакивает - это волшебный баг php и вроде ещё не пофиксили его
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
09.07.2019, 19:27
Вероломство,
Это объявление может содержать инициализацию, но эта инициализация должна быть постоянным значением, то есть значение должно быть вычислено во время компиляции и не должны зависеть от информации, полученной во время выполнения для их вычисления.
0
10 / 7 / 3
Регистрация: 04.07.2019
Сообщений: 94
09.07.2019, 19:30  [ТС]
Jodah, мне через конструктор тогда его объявить объектом, чтобы при отправке в вид ВЕЗДЕ не дописывать (object)?

Добавлено через 1 минуту
Цитата Сообщение от Jodah Посмотреть сообщение
эта инициализация должна быть постоянным значением
и чем не устраивает пустой массив в виде объекта?
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
09.07.2019, 19:31
Лучший ответ Сообщение было отмечено Вероломство как решение

Решение

Цитата Сообщение от Вероломство Посмотреть сообщение
мне через конструктор тогда его объявить объектом
Да.

Цитата Сообщение от Вероломство Посмотреть сообщение
и чем не устраивает пустой массив в виде объекта?
Спросите у PHP.
1
10 / 7 / 3
Регистрация: 04.07.2019
Сообщений: 94
09.07.2019, 19:31  [ТС]
Jodah, благодарю
0
 Аватар для Сергей1980
547 / 377 / 16
Регистрация: 17.12.2009
Сообщений: 991
09.07.2019, 19:44
Цитата Сообщение от Вероломство Посмотреть сообщение
Сергей1980, ну вы там сами накосячили, объявили статику, но обращаетесь через $this, а не self::, return вообще прекрасен
Пережу с Java на PHP, работу не проверял честно))
C return наверное надо вставить new
А self:: даже не знаю что такое , это в PHP инициализация так устроена?))

Добавлено через 10 минут
Вы кстати насчет this не правы, видимо в одном только php и пишите. При использовании ООП это не рекомендуется- вы либо используете процедурный подход и ООП не трогаете,либо клепаете класс :

По вашему варианту так работает:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Public class MyObject{
    public function __construct(array $arguments = array()) {
        if (!empty($arguments)) {
            foreach ($arguments as $property => $argument) {
                $this->{$property} = $argument;
            }
        }
    }
 
    public function __call($method, $arguments) {
        $arguments = array_merge(array("stdObject" => $this), $arguments);
        if (isset($this->{$method}) && is_callable($this->{$method})) {
            return call_user_func_array($this->{$method}, $arguments);
        } else {
            throw new Exception("Fatal error: Call to undefined method stdObject::{$method}()");
        }
    }
}
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
09.07.2019, 21:44
Цитата Сообщение от Сергей1980 Посмотреть сообщение
А self:: даже не знаю что такое , это в PHP инициализация так устроена?))
Как то странно получается, вы не знаете что такое self, но уже решаете кто прав, а кто нет.

Цитата Сообщение от Сергей1980 Посмотреть сообщение
Вы кстати насчет this не правы, видимо в одном только php и пишите. При использовании ООП это не рекомендуется- вы либо используете процедурный подход и ООП не трогаете,либо клепаете класс :
Это где такие рекомендации прописаны? static он и в Африке static, такие свойства/методы не принадлежат объекту и совершенно логично что PHP не позволяет к ним обращаться через $this.
0
 Аватар для Сергей1980
547 / 377 / 16
Регистрация: 17.12.2009
Сообщений: 991
09.07.2019, 23:22
Цитата Сообщение от tarasalk Посмотреть сообщение
Это где такие рекомендации прописаны? static он и в Африке static, такие свойства/методы не принадлежат объекту и совершенно логично что PHP не позволяет к ним обращаться через $this.
Модификатор static напрямую связан с классом, если поле статично, значит оно принадлежит классу, если метод статичный, аналогично — он принадлежит классу.
Предположим, существует статический метод increment() в классе Counter, задачей которого является инкрементирование счётчика count. Для вызова данного метода можно использовать обращение вида Counter->increment(). Нет необходимости создавать экземпляр класса Counter для доступа к статическому полю или методу.

Это фундаментальное отличие между статическими и НЕ статическими объектами (членами класса).

А теперь по поводу this.

Возьмем пример - ручка. У вас есть описание класса ручка. Но это еще не объект - всего лишь описание. Сделав New - вы создадите экземпляр ручки. И экземпляров может быть сколько угодно, и с разными параметрами (цвет, размер и прочее) - но все это ручки.

Так вот. this в ЭКЗЕМПЛЯРЕ указывает НА ЭТОТ САМЫЙ экземпляр (к примеру в конструкторе класса). Это указатель-ссылка на текущий объект- "ПРИМЕНЯТЬ ЗДЕСЬ".

Не будем продолжать войну , потому что сравнивать "на улице темно или холодно" не к лицу ни вам ни мне) .
Потому что согласитесь сравнивать модификатор static с указателем this это НЕ наша тема.

В PHP я относительно новичок , но в остальном все что касается ООП нет.
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
10.07.2019, 13:59
Цитата Сообщение от Сергей1980 Посмотреть сообщение
Это фундаментальное отличие между статическими и НЕ статическими объектами (членами класса).
Спасибо что напомнили, но я прекрасно это знаю. А на вопрос вы не ответили.

Цитата Сообщение от Сергей1980 Посмотреть сообщение
Потому что согласитесь сравнивать модификатор static с указателем this это НЕ наша тема.
Как раз таки наша. Вы через this обратились к статическому свойству, это не работает, на что вам указал Вероломство.
Цитата Сообщение от Сергей1980 Посмотреть сообщение
Вы кстати насчет this не правы, видимо в одном только php и пишите.

Цитата Сообщение от Сергей1980 Посмотреть сообщение
В PHP я относительно новичок , но в остальном все что касается ООП нет.
Мне вам флаг выдать или что?

Цитата Сообщение от Сергей1980 Посмотреть сообщение
не к лицу ни вам ни мне) .
Не к лицу давать ответ не разобравшись в вопросе, а потом еще говорить "я новичок в PHP, но вы уж как-нибудь разберитесь в моем нерабочем коде."
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.07.2019, 13:59
Помогаю со студенческими работами здесь

При попытке создать объект obj=Server.CreateObject('Name.ClassName') Возникает ошибка, 'Объект не поддерживает это свойство или метод.'
При попытке создать объект obj=Server.CreateObject('Name.ClassName') Возникает ошибка, 'Объект не поддерживает это свойство или метод.'...

Как в одну строку создать новый объект, и получить его свойство
Вот мой код: Class Db{ public $connection; function __construct($host, $db, $user, $pass){ try { $db = new...

Объект App и свойство Path
Здравствуйте! У меня VB 6.0. Никак не получается разобраться с объектом App и его свойством Path. Фрагмент кода: Звук.FileName =...

JSON и C# объект вижу а свойство нет!
Доброго времени суток! Всех с наступившим новым годом! Столкнулся с проблемой обработки JSON объекта. передаю из NODE.JS сокетом...

Ссылка через свойство объекта на объект
Собственно сабж - возможно ли это ? var obj:Object = new Object(); obj = 1; Можно ли через свойство "a" получить ссылку на...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru