|
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>
Navigation:
[Reply to this message]
|