31 / 31 / 2
Регистрация: 06.08.2012
Сообщений: 155

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

09.10.2012, 19:44. Показов 1433. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru