Как сделать чтобы обьект класса не создавался?

PhpGuest

Guest
Как сделать чтобы обьект класса не создавался?

<?

class foo {

function foo(){
return null; //?? как сделать чтобы обьект $obj не создался?
}

function out(){
echo 'ok';
}
}

$obj=new foo();
$obj->out(); // не должно работать!
?>
 

Blindman

Новичок
что за чушь? "подскажите мне, как написать программу, которая не будет работать"
 

PhpGuest

Guest
харэ флудить - не знаешь - помолчи : ))

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

Blindman

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

PhpGuest

Guest
мля, я так и знал что этим закончиться :(

интересно в php5 такаяже фигня?
 

Blindman

Новичок
В PHP 5 если в конструкторе возникает exception, то после отработки соответствующего блока catch объект уничтожается.
 

hayk

Новичок
Re: Как сделать чтобы обьект класса не создавался?

PhpGuest
Поробуй так:
PHP:
<?php

class foo
{
    function foo($a)
    {
        if (!$a)
        {
            $this = NULL;
        }
    }

    function out()
    {
        echo 'out';
    }
}

$a = new foo(TRUE);
$b = new foo(FALSE);

$a->out(); // сработает
$b->out(); // Fatal error: Call to a member function on a non-object in ... on line 23

?>
 

Said

Guest
$this = null; конечно работает (сам так делал) но имхо это не есть красиво. Сейчас делаю примерно так:

PHP:
class foo {
  
  var $_error = false;

  function foo($a) {
    if(!$a) $this->_error = true;
  }

   function isValid() {
      return ! $this->_error;
   }

   function out() {
    .......
  }
}

$obj = new($a);

if($obj->isValid())
   $obj->out();
 

PhpGuest

Guest
То что нужно, thx со статическим методом вазиться потом при наследовании.

Автор оригинала: Said
$this = null; конечно работает (сам так делал) но имхо это не есть красиво.
А почему сопсно не красиво? Какраз нормально, как в жабе
 

Said

Guest
возможно тебе захочется расширить класс и использовать другие его
методы независимо от того была ошибка или нет.
 

PhpGuest

Guest
Так, приехали :(

Знгачит если делать с расчетом на использование и в php 5
то явно не надо делать $this=NULL в конструкторе.

Так как же тогда поступать чтобы не выпасть из обьектной модели (без использования всяких статических глобальных функций) , не проверять каждый раз какой нить флаг обьекта типа isvalid и притом надежно заблокировать обьект от использования его методов в случае если конструктор "не дал добро" ?


Автор оригинала: Crazy
Какой приятный приступ здравомыслия среди разработчиков. :)
млин слов нету одни имоции. это какую траву надо было курить чтоб такую обьектную модель в php4 сделать
 

Crazy

Developer
Автор оригинала: PhpGuest
млин слов нету одни имоции. это какую траву надо было курить чтоб такую обьектную модель в php4 сделать
Радоваться надо, что самую крутую траву успели скурить те, кто делал объектную модель для JavaScript... :)

-~{}~ 22.03.04 13:26:

Автор оригинала: PhpGuest
Так как же тогда поступать чтобы не выпасть из обьектной модели
Использовать Factory pattern.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Crazy
Радоваться надо, что самую крутую траву успели скурить те, кто делал объектную модель для JavaScript... :)
Там речь, видимо, уже не о траве, а о более тяжёлых средствах, внутривенных.

Щас вот общаюсь с проектом, где ЖаваСкрипт (мегабайт примерно) писали программисты на Жаве. Иерархии классов глубиной так примерно 7, эмуляция интерфейсов и прочие весёлости. В сочетании с объектной моделью ЖаваСкрипта --- просто щастье. :rolleyes:
 
Сверху