Re: [PHP] php/mysql object id question..

2005-09-15 Thread Oliver Grätz
Jasper Bryant-Greene schrieb:
 Oliver Grätz wrote:
 
3. Yes. One can abuse exceptions to return something in a constructor.
   Just another argument against exceptions ;-) OK, it's unorthodox,
   if you absolutely need to do that, do it and tell nobody *g*.
 
 This is not abusing exceptions. If you throw an exception then the 
 expected behaviour should be that the following code should not be 
 executed [1].
If you throw the exception for error purpose it's OK, but if you throw
the exception just for the purpose of returning a value then it's abuse.
That's what I meant.

 Throwing an exception inside a constructor will prevent the object from 
 being created. It will not allow you to return something of your 
 choice -- I haven't tested but I would expect that the variable you were 
 setting as the object would either remain unset or would be set to NULL.

Tested. non-object. At least this is as expected ;-)

 I'm not too sure why you said just another argument against exceptions 
 (apart from perhaps a lack of understanding) as exceptions are a very 
 useful feature in any language.

Sorry I didn't mark this as personal opinion (just like all the rest).
Exceptions make good programming more difficult without need. Raymond
Chen wrote this about exceptions:

http://blogs.msdn.com/oldnewthing/archive/2005/1/14.aspx


AllOLLi

This time it will surely run.

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[PHP] php/mysql object id question..

2005-09-14 Thread bruce
hi...

i have the following psuedo code...

i'm showing the pertinent parts, and eliminating the rest...

--
class sql
{

   function sql(...)
   {
  return false

  mysql_

  mysql_
   }

}

  $db = new sql(...)

  echo db = .$db;


$db comes back as an object id.. even when i force a 'return false'. it
appears that no matter what i do, the class constructor returns an object
id!!! the weird thing is that it gets to the 'return false' and then still
seems to return the 'object id' i've also replaced 'false' with other values
to see if it made a diff.. it didn't which is good... i would have really
hit the roof then!!

so.. why is this behavior occuring.

any ideas as to why?

or, am i just too tired right now!

thanks

bruce

ps.. i could use the $db, object ID, and try to see if it actually access
the db, in order to determine if it actually exists. but i shouldn't have to
do that... the class should return false!!!

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] php/mysql object id question..

2005-09-14 Thread Stephen Leaf
On Wednesday 14 September 2005 03:42 pm, bruce wrote:
 hi...

 i have the following psuedo code...

 i'm showing the pertinent parts, and eliminating the rest...

 --
 class sql
 {

    function sql(...)
    {
       return false

       mysql_

       mysql_
    }

 }

   $db = new sql(...)
The new sql() is returning an object because that is what your asking for.
now if you did a $db-sql() that'd return false.

yes you did put a return false in the constructor but an object is what is 
being created and thus what is being returned. In my opinion a return 
anything within the constructor shouldn't be allowed. This might be the 
behavior in newer versions but I don't know.
newer syntax is:
class sql {
   function __construct (...) {
       ...
   }
}

truthfully when you do the $db = new sql(...); you are not running that 
function.. you are instantiating a new instance of sql which is invoking the 
object's constructor.


   echo db = .$db;
 

 $db comes back as an object id.. even when i force a 'return false'. it
 appears that no matter what i do, the class constructor returns an object
 id!!! the weird thing is that it gets to the 'return false' and then still
 seems to return the 'object id' i've also replaced 'false' with other
 values to see if it made a diff.. it didn't which is good... i would have
 really hit the roof then!!

 so.. why is this behavior occuring.

 any ideas as to why?

 or, am i just too tired right now!

 thanks

 bruce

 ps.. i could use the $db, object ID, and try to see if it actually access
 the db, in order to determine if it actually exists. but i shouldn't have
 to do that... the class should return false!!!

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



RE: [PHP] php/mysql object id question..

2005-09-14 Thread bruce
stephen,

you're correct regarding what's going on... i had taken some code used in
phpBB, and blindly slammed it into my app to test out their db class... i
had assumed that it worked

guess what!!!

in their constructor, they have the 'return false' arrggghh!!! a quick look
at google, and it appears that you can't return any val from a constructor.
in fact, the 'object id' that's being returned appears to simply be (as you
stated) the instance of the class that was created... as opposed to a return
val...

thoughts/comments/etc...

-bruce


-Original Message-
From: Stephen Leaf [mailto:[EMAIL PROTECTED]
Sent: Wednesday, September 14, 2005 1:51 PM
To: php-general@lists.php.net
Subject: Re: [PHP] php/mysql object id question..


On Wednesday 14 September 2005 03:42 pm, bruce wrote:
 hi...

 i have the following psuedo code...

 i'm showing the pertinent parts, and eliminating the rest...

 --
 class sql
 {

    function sql(...)
    {
       return false

       mysql_

       mysql_
    }

 }

   $db = new sql(...)
The new sql() is returning an object because that is what your asking for.
now if you did a $db-sql() that'd return false.

yes you did put a return false in the constructor but an object is what is
being created and thus what is being returned. In my opinion a return
anything within the constructor shouldn't be allowed. This might be the
behavior in newer versions but I don't know.
newer syntax is:
class sql {
   function __construct (...) {
       ...
   }
}

truthfully when you do the $db = new sql(...); you are not running that
function.. you are instantiating a new instance of sql which is invoking the
object's constructor.


   echo db = .$db;
 

 $db comes back as an object id.. even when i force a 'return false'. it
 appears that no matter what i do, the class constructor returns an object
 id!!! the weird thing is that it gets to the 'return false' and then still
 seems to return the 'object id' i've also replaced 'false' with other
 values to see if it made a diff.. it didn't which is good... i would have
 really hit the roof then!!

 so.. why is this behavior occuring.

 any ideas as to why?

 or, am i just too tired right now!

 thanks

 bruce

 ps.. i could use the $db, object ID, and try to see if it actually access
 the db, in order to determine if it actually exists. but i shouldn't have
 to do that... the class should return false!!!

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] php/mysql object id question..

2005-09-14 Thread Edward Vermillion

bruce wrote:

stephen,

you're correct regarding what's going on... i had taken some code used in
phpBB, and blindly slammed it into my app to test out their db class... i
had assumed that it worked

guess what!!!

in their constructor, they have the 'return false' arrggghh!!! a quick look
at google, and it appears that you can't return any val from a constructor.
in fact, the 'object id' that's being returned appears to simply be (as you
stated) the instance of the class that was created... as opposed to a return
val...

thoughts/comments/etc...

-bruce



Sounds like a good thing to me. What would happen to your code if the 
constructor returned false? How would you handle it? And why would you 
want it to in the first place?


The return from a = new Class(); should be an object as you're assigning 
it to a variable that is supposed to represent the object.


If your doing something in the constructor that might return false, then 
set a property in the class to false and check that. IE for a database 
class if you set up your connection in the constructor then do a


psudocode
if(!mysql_connect...){ $this-connected = false; }
/psudocode

and then check $db-connected after a $db = new DB(); or whatever your 
doing.


Don't get me wrong, I had a lot of return false;'s in my constructors 
before I found out you can't do that, then started to wonder why I would 
want to. ;)


--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] php/mysql object id question..

2005-09-14 Thread Jasper Bryant-Greene

bruce wrote:

in their constructor, they have the 'return false' arrggghh!!! a quick look
at google, and it appears that you can't return any val from a constructor.
in fact, the 'object id' that's being returned appears to simply be (as you
stated) the instance of the class that was created... as opposed to a return
val...


If you want to stop the object from being created for any reason (e.g. 
connection to database failed) and you're using PHP 5, I believe that 
you can throw an exception in the constructor.


From http://php.net/language.oop5.basic :

An object will always be assigned when creating a new object unless the 
object has a constructor defined that throws an exception on error.


--
Jasper Bryant-Greene
Freelance web developer
http://jasper.bryant-greene.name/

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



RE: [PHP] php/mysql object id question..

2005-09-14 Thread bruce
it's not my understanding/use of classes.. my issue is that i was blindly
using code that's been used by a lot of people, but that it obviously hadn't
been thoroughly checked!!

but then, i'm starting to realize that there's probably a great deal of
'opensource' code that's in use that hasn't been thoroughly vetted.

when i used to be a software engineer, there's no way in hell that my teams
would have offered some of this up for consumption..

-bruce

lloks like i'm going to need to start remembering/using that which i long
ago tried to forget!!



-Original Message-
From: Edward Vermillion [mailto:[EMAIL PROTECTED]
Sent: Wednesday, September 14, 2005 2:46 PM
To: [EMAIL PROTECTED]
Cc: php-general@lists.php.net
Subject: Re: [PHP] php/mysql object id question..


bruce wrote:
 stephen,

 you're correct regarding what's going on... i had taken some code used in
 phpBB, and blindly slammed it into my app to test out their db class... i
 had assumed that it worked

 guess what!!!

 in their constructor, they have the 'return false' arrggghh!!! a quick
look
 at google, and it appears that you can't return any val from a
constructor.
 in fact, the 'object id' that's being returned appears to simply be (as
you
 stated) the instance of the class that was created... as opposed to a
return
 val...

 thoughts/comments/etc...

 -bruce


Sounds like a good thing to me. What would happen to your code if the
constructor returned false? How would you handle it? And why would you
want it to in the first place?

The return from a = new Class(); should be an object as you're assigning
it to a variable that is supposed to represent the object.

If your doing something in the constructor that might return false, then
set a property in the class to false and check that. IE for a database
class if you set up your connection in the constructor then do a

psudocode
if(!mysql_connect...){ $this-connected = false; }
/psudocode

and then check $db-connected after a $db = new DB(); or whatever your
doing.

Don't get me wrong, I had a lot of return false;'s in my constructors
before I found out you can't do that, then started to wonder why I would
want to. ;)

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] php/mysql object id question..

2005-09-14 Thread Oliver Grätz
bruce schrieb:
 but then, i'm starting to realize that there's probably a great deal of
 'opensource' code that's in use that hasn't been thoroughly vetted.

1. Constructors cannot explicitly return anything because
   they always return the new object.
2. OpenSource project and the code in them:
   2.1 Most of the projects are grown over time. Over a long time.
   Do you know that moment when you look at code you wrote two
   years ago and find it disgusting?
   2.2 Large projects have large programmer communities and
   therefore programmers with varying expertise.
   2.3 It's PHP. It' PHP! The language a gorilla could learn.
3. Yes. One can abuse exceptions to return something in a constructor.
   Just another argument against exceptions ;-) OK, it's unorthodox,
   if you absolutely need to do that, do it and tell nobody *g*.


AllOLLi

Eric: Hello.
Nadia: Hi!
Eric: I'm.. Eric.. Weiss.. 38.. single.
[Alias 402]

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] php/mysql object id question..

2005-09-14 Thread Jasper Bryant-Greene

Oliver Grätz wrote:

3. Yes. One can abuse exceptions to return something in a constructor.
   Just another argument against exceptions ;-) OK, it's unorthodox,
   if you absolutely need to do that, do it and tell nobody *g*.


This is not abusing exceptions. If you throw an exception then the 
expected behaviour should be that the following code should not be 
executed [1].


Throwing an exception inside a constructor will prevent the object from 
being created. It will not allow you to return something of your 
choice -- I haven't tested but I would expect that the variable you were 
setting as the object would either remain unset or would be set to NULL.


IMHO, this is exactly how it should be, definitely not unorthodox, and 
I'm not too sure why you said just another argument against exceptions 
(apart from perhaps a lack of understanding) as exceptions are a very 
useful feature in any language.


[1] http://php.net/exceptions
--
Jasper Bryant-Greene
Freelance web developer
http://jasper.bryant-greene.name/

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php