| Posted by Joe Scylla on 07/06/07 11:06 
Rik wrote:> On Fri, 06 Jul 2007 09:38:05 +0200, Joe Scylla <joe.scylla@gmail.com>
 > wrote:
 >
 >> Phil Latio wrote:
 >>> Here is some basic example code:
 >>>  $newUser = new User();
 >>> if ($newUser->SaveNewUser())
 >>> {
 >>>  echo "success";
 >>> }
 >>> else
 >>> {
 >>>  echo "failure";
 >>> }
 >>>  Question. Can I modify the above so I instantiate a new object
 >>> within an if statement and apply a method all on one line?
 >>>  Cheers
 >>>  Phil
 >>
 >> Not if you want to use the *new* statement.
 >>
 >> But you can add a static method to the class returning the object, so
 >> you can use following code:
 >>
 >> <code>
 >> if (User::instance()->saveNewUser())
 >>       {
 >>     echo "success";
 >>     }
 >> else
 >>     {
 >>     echo "failed";
 >>     }
 >> </code>
 >>
 >> the static method may look like this:
 >>
 >> <code>
 >> public static function &instance()
 >>     {
 >>     static $instance = null;
 >>     if (is_null($instance))
 >>         {
 >>         $instance = new User();
 >>         //some more code to create the object
 >>         }
 >>     return $instance;
 >>     }
 >> </code>
 >
 > While this can certainly be done, this is a way to create a Singleton.
 > Unless that's what the OP wants, forget about the static $instance.
 >
 
 You are right. The instance method dont have to be a static:
 
 <code>
 //class
 class test
 {
 private $Id = 0;
 public function __construct($id = 0)
 {
 $this->Id = $id;
 }
 public function instance($id)
 {
 $r = new test($id);
 //do some more stuff
 return $r;
 }
 public function getId()
 {
 return ($this->Id > 0) ? $this->Id : false;
 }
 }
 
 //test
 if (test::instance(1)->getId())
 {
 echo "success";
 }
 else
 {
 echo "failed";
 }
 </code>
 [Back to original message] |