powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP, ООП, наследование) Как поступают в таких случаях?
9 сообщений из 9, страница 1 из 1
(PHP, ООП, наследование) Как поступают в таких случаях?
    #33138867
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим есть следующие наследование классов:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
// Error class
class Error {
	
	var $err;
	
	// constructor
	function Error($err_mess)
	{
		$this->err = $err_mess;
	}
	
	// returns error message
	function getError()
	{
		return $this->err;
	}
}

// A

class A extends Error {

	var $foo;
	
	function A($f)
	{
		if (!$f)
		{
			$this->err = 'Error in A class';
			
			// settype(&$this, 'null'); // по смыслу было бы хорошо возвращать NULL значение
			return false;
		}
		
		$this->foo = 'Created in A';
	}
	
	function getFoo()
	{
		return $this->foo;
	}
}

// -----------------------------------------------------------------------------------------
// Объект создается

$ob_a1 = new A(true);

if (!$ob_a1)
{
	echo $ob_a1->getError();
}
echo $ob_a1->getFoo();

// -----------------------------------------------------------------------------------------
// 

$ob_a2 = new A(false);

if (!$ob_a2)
{
	echo $ob_a2->getError();
}

echo $ob_a2->getFoo();

Интересует следующее:

как сделать так, чтобы

- если не выполняется какое-то условие в конструкторе класса A, то возвращался "NULL-объект"
- при этом требуется получить сообщение об ошибке, из-за которого невозможно создание экземпляра класса.

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

Как вообще поступают в таких случаях?

P.S. Сразу извиняюсь за коряво поставленный вопрос, потому что сам пока не знаю как точнее и понятнее описать проблему. Если что, задавайте вопросы. :)
...
Рейтинг: 0 / 0
(PHP, ООП, наследование) Как поступают в таких случаях?
    #33139011
.-.-.-.-.-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
наследовать сущность от класса Error это все равно что наследовать ее от класса DB - неправильно.
Что можно наследовать от класса Error - другие ошибки. Примером может быть дерево исключений в любом языке (например python http://www.python.org/doc/current/lib/module-exceptions.html)

Объекта Null - не существует - есть значение null.
Хотя можно создать самому такой класс.

> - если не выполняется какое-то условие в конструкторе класса A, то возвращался "NULL-объект"

создавать объект не через конструктор а через статический метод (паттерн factory и ему подобные)
$db = DB::createConnection();

Что касается получения текста ошибки можно придумать разные способы:
1. возвращать объект типа Error. (см pear)
2. создать в классе поле error и в случае ошибки писать в него текст :
$db = new DB();
if ($db->error) {
die($db->error);
}
...
Рейтинг: 0 / 0
(PHP, ООП, наследование) Как поступают в таких случаях?
    #33139062
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.-.-.-.-.-наследовать сущность от класса Error это все равно что наследовать ее от класса DB - неправильно.
С замечанием полностью согласен.

Просто хотелось сделать один интерфейс для получения и обработки ошибок.

Может быть Вы тогда посоветуете в каком направлении двигаться. В ООП-программировании на PHP я пока что не силен и это мой первый опыт :).

.-.-.-.-.-Объекта Null - не существует - есть значение null.Если вы заметили, то там были кавычки " ("NULL-объект").

.-.-.-.-.-Что касается получения текста ошибки можно придумать разные способы:
1. возвращать объект типа Error. (см pear)
2. создать в классе поле error и в случае ошибки писать в него текст :
$db = new DB();
if ($db->error) {
die($db->error);
}
А как в себя в таком случае поведут наследуемые классы?
Не будет ли перекрытия имен и т.д.?
...
Рейтинг: 0 / 0
(PHP, ООП, наследование) Как поступают в таких случаях?
    #33139118
.-.-.-.-.-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В большинстве случаев агрегацию следует предпочесть наследованию.
Наследуемые классы поведут себя так, как ты напишешь. Если получиться наложение, то это будет твоя ошибка. Под ПХП5 можно использовать private-свойства, тогда такие наложения можно будет легче отслеживать.

Посоветовать в обучении ничего не могу (разве что почитать похожие обсуждения на phpclub - там таких вопросов было много)
...
Рейтинг: 0 / 0
(PHP, ООП, наследование) Как поступают в таких случаях?
    #33139161
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может быть Вы тогда посоветуете в каком направлении двигаться.
если хотите ООП то следует двигаться в сторону тех языков (или их версий) которые позволяют это делать, а не извращаться там где это скорее всего совершенно не нужно.

ЗЫ
ох могут побить за подобные заявления тута ;-))
...
Рейтинг: 0 / 0
(PHP, ООП, наследование) Как поступают в таких случаях?
    #33139758
JackS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vfabr Может быть Вы тогда посоветуете в каком направлении двигаться.
если хотите ООП то следует двигаться в сторону тех языков (или их версий) которые позволяют это делать, а не извращаться там где это скорее всего совершенно не нужно.

ЗЫ
ох могут побить за подобные заявления тута ;-))

уже достаю ремень %)
...
Рейтинг: 0 / 0
(PHP, ООП, наследование) Как поступают в таких случаях?
    #33139983
.-.-.-.-.-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vfabr Может быть Вы тогда посоветуете в каком направлении двигаться.
если хотите ООП то следует двигаться в сторону тех языков (или их версий) которые позволяют это делать, а не извращаться там где это скорее всего совершенно не нужно.

ЗЫ
ох могут побить за подобные заявления тута ;-))
в ПХП5 вполне нормальные возможности для ООП
...
Рейтинг: 0 / 0
(PHP, ООП, наследование) Как поступают в таких случаях?
    #33140043
vfabr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
для тех кто в танке повторяю

языков (или их версий)

;-)
...
Рейтинг: 0 / 0
(PHP, ООП, наследование) Как поступают в таких случаях?
    #33146413
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй исключительную ситуацию в конструкторе
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP, ООП, наследование) Как поступают в таких случаях?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]