Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.php > #14581
| From | "Christoph M. Becker" <cmbecker69@arcor.de> |
|---|---|
| Newsgroups | comp.lang.php |
| Subject | Re: OO PHP result of new if a constructor fails |
| Date | 2014-11-14 13:49 +0100 |
| Organization | solani.org |
| Message-ID | <m44tp7$9l0$1@solani.org> (permalink) |
| References | (3 earlier) <2544086.7FOxZRQfaF@PointedEars.de> <m40t74$pi6$1@solani.org> <2482034.fQki01Cq4G@PointedEars.de> <m42aln$t2l$1@solani.org> <14454844.m36nGyrlVr@PointedEars.de> |
Thomas 'PointedEars' Lahn wrote:
> Christoph M. Becker wrote:
>
>> Thomas 'PointedEars' Lahn wrote:
>>> Christoph M. Becker wrote:
>> The PHP developers seem to consider the specification authoritative, see
>> e.g. <http://news.php.net/php.internals/78871>f.
>
> I do not see the connection. Wrong ID?
The messages are part of a larger thread; unfortunately, the web
interface doesn't seem to allow viewing by thread, but rather all
threads are interleaved. The following message
<http://news.php.net/php.internals/78872> (what I wanted to indicate
with the trailing "f"), makes it a bit more clear. The "spec" they're
mentioning, is the lang-spec (not the PHP manual).
>>>> AFAIK, the behavior of ECMAScript is rather uncommon, but quite useful
>>>> (especially wrt. calling the constructor function without new), but can
>>>> be simulated in PHP with static factory methods and (a) private
>>>> constructor(s).
>>> No.
>>
>> Why not?
>
> Basically, because you cannot do the following in PHP and have a *D*
> instance referred by *both* ”o” *and* “o2”:
>
> function C ()
> {
> function D () {}
>
> return new D();
> }
>
> var o = new C();
> var o2 = C();
>
> Your static factory method is a *different* function that you *cannot*
> invoke with “new” as well. Therefore, it is not a proper _emulation_.
Indeed, it is not a proper *emulation* (thanks for the correction).
However, you can do the following:
class D {}
class C {
static function create() {
return new D();
}
private function __construct() {}
}
$o = C::create();
$o2 = C::create();
IMHO, that comes quite close to the intention of returning an instance
of another class, when trying to create a certain class' instance. If
PHP had nested classes (a respective RFC[1] has been withdrawn, though),
it would even come closer. (For now D could be regarded as been
private, and documented as such, and maybe renamed to _D.) The
possibility of creating an instance with or without /new/, seems to be
more of a technical detail.
[1] <https://wiki.php.net/rfc/nested_classes>
--
Christoph M. Becker
Back to comp.lang.php | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
OO PHP result of new if a constructor fails "James Harris" <james.harris.1@gmail.com> - 2014-11-11 15:13 +0000
Re: OO PHP result of new if a constructor fails Jerry Stuckle <jstucklex@attglobal.net> - 2014-11-11 10:20 -0500
Re: OO PHP result of new if a constructor fails "James Harris" <james.harris.1@gmail.com> - 2014-11-11 15:56 +0000
Re: OO PHP result of new if a constructor fails Jerry Stuckle <jstucklex@attglobal.net> - 2014-11-11 11:03 -0500
Re: OO PHP result of new if a constructor fails "James Harris" <james.harris.1@gmail.com> - 2014-11-11 16:27 +0000
Re: OO PHP result of new if a constructor fails Matthew Carter <m@ahungry.com> - 2014-11-11 12:01 -0500
Re: OO PHP result of new if a constructor fails Jerry Stuckle <jstucklex@attglobal.net> - 2014-11-11 12:56 -0500
Re: OO PHP result of new if a constructor fails Jerry Stuckle <jstucklex@attglobal.net> - 2014-11-11 12:52 -0500
Re: OO PHP result of new if a constructor fails "Christoph M. Becker" <cmbecker69@arcor.de> - 2014-11-11 18:12 +0100
Re: OO PHP result of new if a constructor fails Richard Damon <Richard@Damon-Family.org> - 2014-11-11 13:03 -0500
Re: OO PHP result of new if a constructor fails Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-11-11 23:54 +0100
Re: OO PHP result of new if a constructor fails "Christoph M. Becker" <cmbecker69@arcor.de> - 2014-11-12 03:00 +0100
Re: OO PHP result of new if a constructor fails Matthew Carter <m@ahungry.com> - 2014-11-11 22:25 -0500
Re: OO PHP result of new if a constructor fails Jerry Stuckle <jstucklex@attglobal.net> - 2014-11-11 22:36 -0500
Re: OO PHP result of new if a constructor fails Matthew Carter <m@ahungry.com> - 2014-11-12 01:30 -0500
Re: OO PHP result of new if a constructor fails Jerry Stuckle <jstucklex@attglobal.net> - 2014-11-12 07:08 -0500
Re: OO PHP result of new if a constructor fails "Christoph M. Becker" <cmbecker69@arcor.de> - 2014-11-12 13:30 +0100
Re: OO PHP result of new if a constructor fails Denis McMahon <denismfmcmahon@gmail.com> - 2014-11-12 13:52 +0000
Re: OO PHP result of new if a constructor fails "Christoph M. Becker" <cmbecker69@arcor.de> - 2014-11-13 00:46 +0100
Re: OO PHP result of new if a constructor fails Jerry Stuckle <jstucklex@attglobal.net> - 2014-11-12 22:28 -0500
Re: OO PHP result of new if a constructor fails Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-11-12 21:30 +0100
Re: OO PHP result of new if a constructor fails "Christoph M. Becker" <cmbecker69@arcor.de> - 2014-11-13 01:15 +0100
Re: OO PHP result of new if a constructor fails Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-11-13 04:09 +0100
Re: OO PHP result of new if a constructor fails Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2014-11-13 07:42 +0000
Re: OO PHP result of new if a constructor fails "Christoph M. Becker" <cmbecker69@arcor.de> - 2014-11-13 14:11 +0100
Re: OO PHP result of new if a constructor fails Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-11-13 21:40 +0100
Re: OO PHP result of new if a constructor fails "Christoph M. Becker" <cmbecker69@arcor.de> - 2014-11-14 13:49 +0100
Re: OO PHP result of new if a constructor fails Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-11-14 23:25 +0100
Re: OO PHP result of new if a constructor fails Jerry Stuckle <jstucklex@attglobal.net> - 2014-11-12 22:29 -0500
Re: OO PHP result of new if a constructor fails Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-11-13 21:45 +0100
Re: OO PHP result of new if a constructor fails Jerry Stuckle <jstucklex@attglobal.net> - 2014-11-13 15:56 -0500
Re: OO PHP result of new if a constructor fails Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-11-13 22:09 +0100
Re: OO PHP result of new if a constructor fails Jerry Stuckle <jstucklex@attglobal.net> - 2014-11-13 21:03 -0500
Re: OO PHP result of new if a constructor fails "Christoph M. Becker" <cmbecker69@arcor.de> - 2014-11-13 22:47 +0100
Re: OO PHP result of new if a constructor fails Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2014-11-13 22:59 +0100
Re: OO PHP result of new if a constructor fails "Christoph M. Becker" <cmbecker69@arcor.de> - 2014-11-18 19:02 +0100
csiph-web