powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP) Отмена создания объекта
11 сообщений из 11, страница 1 из 1
(PHP) Отмена создания объекта
    #34498055
mrJust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
php 4.
Господа, не знаю правильно или нет, но при создании объекта я проверяю входные данные и если они не корректны, собсна хочу вместо объекта возвратить NULL, а возвращается вовсе не NULL, а объект. Как быть?
...
Рейтинг: 0 / 0
(PHP) Отмена создания объекта
    #34500460
RUSYA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
код в студию...
...
Рейтинг: 0 / 0
(PHP) Отмена создания объекта
    #34500547
mrJust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
class user
{
    var $login;
    var $eMail;

    function user($userName, $eMail,...)
    {
       if ( !isLogin($userName) || !isEMail($eMail) )
       {
           // собсна здесь хотелось бы прекратить создание объекта.
           // return NULL не помогает, т. к. после вызова конструктора
           // переменная, которой присваивается объект класса user 
           // имеет тип object. А мне хотелось бы NULL
       }
       $this->login = $userName;
       $this->email = $eMail;
    }
}
Вот.
т.е. получается так:
Код: plaintext
1.
2.
3.
include 'class_user.php';
$vovan = new user('vovan', 'vovan@baklan.durman');
$stason = new user('', '---');

Переменные Вован и Стасон имеют тип object, но из примера видна, что для Стасона вызывается конструктор с невалидными параметрами. Хотелось бы чтобы конструктор в таком случае, вместо объекта возвратил бы NULL.
Поясните, может не в ту степь думаю?
Конечно, можно проверку данных вынести из класса, но почему бы классу самому не проверять свои данные?
...
Рейтинг: 0 / 0
(PHP) Отмена создания объекта
    #34500560
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
- переходите на PHP 5 и используйте Exception
...
Рейтинг: 0 / 0
(PHP) Отмена создания объекта
    #34500738
sxq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По сути вы хотите в процессе создания объекта прервать это создание, без прерывания программы, это слишком экзотично, даже сложно предположить как это можно было бы запрограммировать внутри PHP. Чесно говоря даже сложно понять, как у вас реализован механизм проверки на правильность далее в программе, которая использует объект user, вы просто проверяете, например, $vovan на предмет объекта или как?
Я так понял, вы хотите экономить память, не занимать объектами/ресурсами, которые заведомо не будут использоваться?
...
Рейтинг: 0 / 0
(PHP) Отмена создания объекта
    #34503289
mrJust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sxqЯ так понял, вы хотите экономить память, не занимать объектами/ресурсами, которые заведомо не будут использоваться?
Правильно поняли.
Видите ли, у меня хромает ООП, а отсюда очень часто возникают дилемы при проектировании классов!
В данном примере я демонстрирую класс user.
С одной стороны, объект сам должен отвечать за корректность/целостность своих данных. Но из данного примера я понял, что те значения, которые передаются в конструктор должны быть проверенными извне.
...
Рейтинг: 0 / 0
(PHP) Отмена создания объекта
    #34507432
svazist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С точки зрения ООП иннициализировать объект и получать вместо него NULL - по меншей мере глупо. Исключение выбрасывать - идеальный вариант, но как тут уже подметили это только в 5-й версии.

А валидность данных объекта это свойство объекта, собственно его и надо проверять
т.е. добавить метод isValid()

Код: plaintext
1.
2.
3.
4.
5.
6.
/**
*@return bool
*/
function isValid(){
....
}

Конструктор пускай занимается только установкой данных.
После иннициализации объекта, проверяем его валидность, если false уничтожаем ..

Использование метода валидации [isValid()] улучшит читаемость кода, и избавить от необходимости разбираться в исходнике класса user.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
(PHP) Отмена создания объекта
    #38311371
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mrJust,

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
class User {
public static get_instance($param) {
  if (good_param($param) )
     return new User;
  
  return NULL;
}

protected __constructor() {...} //дабы не работал внешний вызов new User;


}

//
$user = User::get_instance('petichkin');



тут некоторые советовали тебе исключения.

ну с точки зрения атомарной, что прийдёться вызов инстанса оборачивать в блок трай-кетч, что после вызова сделать проверку а не вернулся ли нулл - вообщемто паралельно.

но это имено с атомарной точки зрения - глобально, исключения удобней будут.

кстате, в хпх не уверен, но в других языках если в конструкторе выскакивает исключение, это равноцено созданию "мертвого" обьекта - как будто никто его и не создавал.
тоесть физически после возникновения исключения не обработаного в конструкторе, мы из него(конструктора) вылетаем, где бы мы исключение не обработали, обьекта не будет ,и памяти для него выделеной не будет.
...
Рейтинг: 0 / 0
(PHP) Отмена создания объекта
    #38311395
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторну с точки зрения атомарной, что прийдёться вызов инстанса оборачивать в блок трай-кетч
жжошь.
расскажи как на php можно НЕАТОМАРНО создать объект.
...
Рейтинг: 0 / 0
(PHP) Отмена создания объекта
    #38311987
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453 ,
ScareCrow ,

Может быть уже пора прояснить понятие "атомарности" в контексте создаваемого объекта? Или тему прошлого десятилетия можно смело закрыть, дабы не плодить очередных обсуждений ентой самой атомарности в вакууме? ;-)
...
Рейтинг: 0 / 0
(PHP) Отмена создания объекта
    #38312661
artas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkle,

прояснить и закрыть
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP) Отмена создания объекта
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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