[PHP] class constructor overloading
Hi, is it possible to overload the class construct(or) ? if yes, how ? thx. -- Alain Windows XP SP3 PostgreSQL 8.2.4 / MS SQL server 2005 Apache 2.2.4 PHP 5.2.4 C# 2005-2008
Re: [PHP] class constructor overloading
2008/10/23 Alain Roger [EMAIL PROTECTED]: is it possible to overload the class construct(or) ? if yes, how ? class A { function __construct() { echo A; } } class B extends A { function __construct() { echo B; parent::__construct(); } } $B = new B(); -- http://www.otton.org/ -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] class constructor overloading
thanks a lot, this is exactly what i needed. if the construct of based class A accept arguments, i guess that construct of class B must have the sames. moreover, i guess that something like that must be written: class A { function __construct($nameA) { ... } } class B extends A { function __construct($nameB) { parent::__construct($nameB); } } am i right ? thanks. A.
Re: [PHP] class constructor overloading
Alain Roger wrote: thanks a lot, this is exactly what i needed. if the construct of based class A accept arguments, i guess that construct of class B must have the sames. moreover, i guess that something like that must be written: class A { function __construct($nameA) { ... } } class B extends A { function __construct($nameB) { parent::__construct($nameB); } } am i right ? thanks. A. Yes -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] class constructor overloading
2008/10/23 Alain Roger [EMAIL PROTECTED]: thanks a lot, this is exactly what i needed. if the construct of based class A accept arguments, i guess that construct of class B must have the sames. No, you can change the signature of a method when you overload it. Below, B::__construct() accepts 1 argument while A::__construct() accepts 0 arguments: class A { function __construct() { echo A; } } class B extends A { function __construct( $string ) { echo $string; parent::__construct(); } } $B = new B( B ); If you need to force a certain signature in child classes, you can declare the parent class abstract: abstract class A { abstract function f( $a ); } class B extends A { function f( $a, $b ) // throws an error { echo $a, $b; } } $B = new B(B, C); However, if you declare the constructor as abstract, it will be ignored. -- http://www.otton.org/ -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] class constructor overloading
Alain Roger schreef: thanks a lot, this is exactly what i needed. if the construct of based class A accept arguments, i guess that construct of class B must have the sames. moreover, i guess that something like that must be written: I guess you find guessing preferable to RTFM and/or trying code out. class A { function __construct($nameA) { ... } } class B extends A { function __construct($nameB) { parent::__construct($nameB); } } am i right ? are you? thanks. A. -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] class constructor overloading
is it possible to overload the class construct(or) ? if yes, how ? No, it's not. class A { function __construct() { echo A; } } class B extends A { function __construct() { echo B; parent::__construct(); } } $B = new B(); The above is an example of overriding, not overloading; PHP allows the former but not the latter. Examples of overloading include: class A { function myFunc( $boolean ) { } function myFunc( $string ) { } function myFunc( $array ) { } } Because PHP is loosely typed, the above is largely moot/unnecessary. class B { function myFunc( $boolean ) { } function myFunc( $boolean, $string ) { } function myFunc( $boolean, $string, $array ) { } } PHP allows you to get around the above by allowing you to define default values for arguments. Doing that is kind of like overloading but only in a fake-me-out kind of way. So instead of overloading the myFunc method, you could just define it as follows: class B { function myFunc( $boolean = FALSE, $string = '', $array = array()) { } } but even that doesn't ensure that the data type of each argument is as you might expect. As I stated above, PHP is loosely typed so there is nothing preventing, say, the $string argument from actually being a numeric datatype. If you are using PHP5+, you can sort of get around that by using type hinting (http://us.php.net/manual/en/language.oop5.typehinting.php) but you can only type hint objects and arrays. In closing, to answer your question, Overriding: yes Overloading: no thnx, Chris -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] Class constructor
On 31 Jan 2006, at 13:52, David Grant wrote: Drop __construct, PHP5 will call Test() anyway. From http://uk.php.net/manual/en/language.oop5.decon.php: For backwards compatibility, if PHP 5 cannot find a __construct() function for a given class, it will search for the old-style constructor function, by the name of the class. Sure, if you're planning on writing 'backwards' code for ever more... For maximum efficiency in PHP5, do it this way around: class test{ function Test(){ $this-__construct() //This will be called in PHP4 } function __construct(){ //This will be called in PHP5 } } Why penalise the platform you're intending to run it on? Marcus -- Marcus Bointon Synchromedia Limited: Putting you in the picture [EMAIL PROTECTED] | http://www.synchromedia.co.uk -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP] Class constructor
Hi, I'm writing a simple class. In order to be compatible with php4 and php5 I've done this : class test{ function Test(){ //This will be called in PHP4 } function __construct(){ //This will be called in PHP5 $this-Test(); } } Is this a solution ? Is there a better way ? Thanks. -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] Class constructor
You could try with phpversion(). Georgi Ivanov wrote: Hi, I'm writing a simple class. In order to be compatible with php4 and php5 I've done this : class test{ function Test(){ //This will be called in PHP4 } function __construct(){ //This will be called in PHP5 $this-Test(); } } Is this a solution ? Is there a better way ? Thanks. -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] Class constructor
Georgi, Drop __construct, PHP5 will call Test() anyway. From http://uk.php.net/manual/en/language.oop5.decon.php: For backwards compatibility, if PHP 5 cannot find a __construct() function for a given class, it will search for the old-style constructor function, by the name of the class. David -- David Grant http://www.grant.org.uk/ http://pear.php.net/package/File_Ogg0.2.1 http://pear.php.net/package/File_XSPF 0.1.0 WANTED: Junior PHP Developer in Bristol, UK -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] Class constructor
Yes, I noticed that PHP5 call the old way constructor, but what if in future version they drop this feature ? I think this is workaround for the problem . Or not ? On Tuesday January 31 2006 15:52, David Grant wrote: Georgi, Drop __construct, PHP5 will call Test() anyway. From http://uk.php.net/manual/en/language.oop5.decon.php: For backwards compatibility, if PHP 5 cannot find a __construct() function for a given class, it will search for the old-style constructor function, by the name of the class. David -- David Grant http://www.grant.org.uk/ http://pear.php.net/package/File_Ogg0.2.1 http://pear.php.net/package/File_XSPF 0.1.0 WANTED: Junior PHP Developer in Bristol, UK -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] Class constructor
On Tue, January 31, 2006 7:46 am, Georgi Ivanov wrote: I'm writing a simple class. In order to be compatible with php4 and php5 I've done this : class test{ function Test(){ //This will be called in PHP4 } function __construct(){ //This will be called in PHP5 $this-Test(); } } Is this a solution ? Is there a better way ? I suppose if you want the code to run under PHP6, 7, 8, 9, 10, ... it is somewhat forward-looking to the potential day when Test::Test() might no longer work as the constructor... -- Like Music? http://l-i-e.com/artists.htm -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP] class constructor polymorphism
Hi to all, I'm a C++ programmer and I've to convert some simple classes from C++ to PHP. My toolbar_button class must have two or more constructors so I ask you if this is possible with PHP: class toolbar_button { CString m_name, m_tooltip, m_image, m_action; bool m_state, m_is_separator; toolbar_button(void) { /* my code here */ }; toolbar_button(AnsiString name, bool state) { /* my code here */ }; toolbar_button(toolbar_button *abutton) { /* my code here */ }; } I'm using PHP 5.0.4 for Windows. Thank you very much Silverio -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] class constructor polymorphism
[EMAIL PROTECTED] wrote: Hi to all, I'm a C++ programmer and I've to convert some simple classes from C++ to PHP. My toolbar_button class must have two or more constructors so I ask you if this is possible with PHP: You can't overload a constructor, I mean a function in PHP. Maybe extending two classes from the base would be a good work-around. Hope this helps, -- Josip Dzolonga http://josip.dotgeek.org jdzolonga[at]gmail.com -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php