Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
31 / 31 / 2
Регистрация: 06.08.2012
Сообщений: 155

Свойства классов

09.10.2012, 19:44. Показов 1410. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Такая проблема:
Один файл содержит класс, внутри него инклюдится файл, который тоже содержит класс и в нем есть методы, ну так вот как методы второго класса могут получить свойства первого без наследования? ( просто если наследовать, то второй класс не видит первый и летит фатальная ошибка )
Выглядит это так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// file 1.php
class foo{
public $foo = 1;
function bar(){
include('2.php');
foo2::Func(); // Ошибка : $this non object .. context..
}
}
//file 2.php
Class foo2{
function Func(){
echo $this->foo;
}
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.10.2012, 19:44
Ответы с готовыми решениями:

Свойства классов Qt
Здравствуйте. Почитал документацию и некоторые книги, но не пойму, зачем классам библиотеки свойства (Q_PROPERTY)? В том смысле, что почему...

свойства классов
property ConnectionString : String read FConnectionString write FConnectionString; поясните пожайлуста что это означает

Свойства классов
перечитал кучу информации в интернете и не могу никак понять как получить доступ к свойствам. я подключил using...

8
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
10.10.2012, 00:14
что значит не видит при наследовании класс?

Цитата Сообщение от spyeye Посмотреть сообщение
// Ошибка : $this non object .. context..
почитайте о статических свойствах раз вам это так необходимо. $this - указатель на текущий объект, а не класс.. А объект от класса foo2 таким образом не создается внутри класса foo
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
10.10.2012, 01:11
Пока вы в своей иерархии классов и файлов не зашли слишком далеко, почитайте о ООП, посмотрите как строят приложения, какие есть патерны.
ООП должно обеспечивать расширяемость и на зависимость между модулями.
Нет, не всегда есть независимость, совсем не избежать зависимости классов, но стремится к этому нужно

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


Почитайте о автозагрузке (__autoload) классов.
Или сделайте свой загрузчик классов.

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

Например у вас есть Класс Животные, и есть класс Собака.
Тут лучше сделать наследование, то етсь что бы Животные, был родительским классом для Собака.

А вот допустим у вас есть класс Игрок, а есть класс Оружие. Тут игрок может обращатся к оружию, но наследование тут не подойдёт, тут лучше сделать свойство классу Игрок, вкотором будет хранится созданный объект класса Оружие.
Но и тут ещё не всё так хорошо.
А что если оружия будут разные?
Тогда лучше сделать интерфейс, с описанием всех общих методов оружия, которые игрок сможет юзать, и делать классы Меч, пулемёт и прочие, с указанием этого интерфейса.
Тогда в свойстве класса может хранится различное оружие, но он сможет смело им пользоваться, не боясь что какого либо метода не будет

Вообщем учите теорию ООП. Не страшно если с первого раза не понятно то что вы читаете. Много статей и книг написано так, что новичёк запутается в терминах, и это отпугивает. Но потом, когда прочтёте пару книг, или даже перечитаете несколько раз их, каждый раз будет понятней становится
1
31 / 31 / 2
Регистрация: 06.08.2012
Сообщений: 155
10.10.2012, 15:38  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
что значит не видит при наследовании класс?
Если я сделаю так:
PHP
1
foo2 extends foo {.. }
То, как я уже писал, будет фатал еррор, мол не найден класс foo2.

Добавлено через 2 минуты
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
// --------
Теория как раз таки не нужна, ибо на практике возникают вопросы, как я писал выше, а теорию я уже читал & слушал давно.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
10.10.2012, 16:22
Цитата Сообщение от spyeye Посмотреть сообщение
Теория как раз таки не нужна
а вот на мой взгляд (и не только на мой) - нужна.
Цитата Сообщение от spyeye Посмотреть сообщение
Если я сделаю так:
естественно. Знаете, что такое рекурсия и деление шкуры не убитого медведя?) Вот тоже самое и у вас получается. Вы класс еще не создали - а уже пытаетесь его юзать, при этом рекурсивно..

Добавлено через 56 секунд
З.Ы. вам походу нужно что то типа такого Инициализация статических членов класса
0
31 / 31 / 2
Регистрация: 06.08.2012
Сообщений: 155
10.10.2012, 16:47  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
Добавлено через 56 секунд
З.Ы. вам походу нужно что то типа такого Инициализация статических членов класса
Не особо понял, как это поможет в моём случае.
Возможно, вы меня неправильно понимаете:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// file 1.php
include('2.php');
class foo{
public $link;
// бд и т.п. свойсва
function __constuct($db1, $db2) 
{ mysql_connect($this->db..).... } // подключение к бд
function bar(){
foo2::Func(); // Ошибка : $this non object .. context..
}
}
$foo = new foo(arg, arg);
//file 2.php
Class foo2 extends foo{ // Fatal error: не найден класс foo
public static function Func(){
mysql_query(...); // А тут у нас вообще не видны свойства
}
$foo2 = new foo2;
}
Не могу решить проблему : как правильно унаследовать свойства первого класса foo, чтобы использовать их во втором классе?
Подскажите пожалуйста.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
10.10.2012, 16:52
Цитата Сообщение от spyeye Посмотреть сообщение
Возможно, вы меня неправильно понимаете:
это вы меня неправильно понимаете. почитайте про синглтон например
Цитата Сообщение от spyeye Посмотреть сообщение
PHP
1
foo2::Func(); // Ошибка : $this non object .. context..
Если на примере из жизни то этот код можно озвучить как то так:
Я купил яблоко, но еще не купил грушу. Положу на тарелку купленное яблоко и еще не купленное грушу, а потом возьму сначала грушу, а затем яблоко.
Как вы себе это представляете?
0
31 / 31 / 2
Регистрация: 06.08.2012
Сообщений: 155
10.10.2012, 16:54  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
это вы меня неправильно понимаете. почитайте про синглтон например

Если на примере из жизни то этот код можно озвучить как то так:

Как вы себе это представляете?
А как тогда правильно вызвать статический метод класса?
$foo2::bar()?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
10.10.2012, 17:10
тогда во первых, т.к. объект не создан - то необходимо делать свойство тоже статическим. во вторых, так как вы не переопределяете конструктор - то объект от второго класса необходимо создавать также с двумя аргументами. в третьих, у вас ошибка в имени метода конструктора. но опять же, лучше создавать объект и хранить его в свойстве, чем так.. синглтон не зря часто используют для работы с БД

Добавлено через 1 минуту
:: - это обращение к элементу класса, а не объекта
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.10.2012, 17:10
Помогаю со студенческими работами здесь

Статические свойства классов
Есть класс со статическим свойством class Data { protected: static char *str, *newStr; static unsigned long writedBytes,...

Инкапсуляция и свойства классов
Ребят, такая проблема, пол интернета перерыл, но никак не могу понять, как использовать инкапсуляцию и свойства классов. Хотелось бы...

Сменить свойства классов
привет. есть такой код class c: value = None next = None c1=c() c2=c() c3=c() ... c1.next = c2 c2.next = c3

Двусмысленные свойства классов
Всем доброго времени суток! Есть такая проблема. Пишу проект, подразумевающий наличие абстрактного класса, у которого наследуют свойства 2...

Можно ли связывать свойства классов
Доброго времени суток. На форме размещается несколько экземпляров моего класса Indicator, созданного на основе UserControl Свойство,...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
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