Req #70413 [Opn->Wfx]: FR: support to new() keyword
| From: | cmb@php.net | Date: | Fri, 04 Sep 2015 00:08:36 +0000 |
| Subject: | Req #70413 [Opn->Wfx]: FR: support to new() keyword | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-195746@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=70413&edit=1
ID: 70413
Updated by: cmb@php.net
Reported by: david dot proweb at gmail dot com
Summary: FR: support to new() keyword
-Status: Open
+Status: Wont fix
Type: Feature/Change Request
Package: Scripting Engine problem
PHP Version: Next Minor Version
-Assigned To:
+Assigned To: cmb
Block user comment: N
Private report: N
New Comment:
> Me neither.
So I'm marking this request as WONTFIX.
Previous Comments:
------------------------------------------------------------------------
[2015-09-02 21:33:39] requinix@php.net
Me neither.
Already supported because you're trying to make it harder than it really is:
new('class_name') -> new class_name
new(User::class) -> new User
new($user) -> new $user
new(any, 1, 2, 3) -> new any(1, 2, 3)
Not currently supported:
new(expr)
new($object)
but those are both trivially solved with a temporary variable or the small function already
provided.
------------------------------------------------------------------------
[2015-09-02 21:17:25] cmb@php.net
Frankly, I can't see any real improvement with this new syntax.
------------------------------------------------------------------------
[2015-09-02 20:48:13] david dot proweb at gmail dot com
Description:
------------
It should works exactly like the
new, but with some features.
// Usage.
new('\User'); === new User;
new(User::class); === new User;
new($user); === new $user;
$user = new(User::class)->find(1); === (new User)->find(1);
// Arguments.
new(User::class, 1, 2, 3) === new User(1, 2, 3);
// Maybe: use another object to copy directly the name.
$userClass = new(User::class);
$userNew = new($userClass); === $userNew = new(get_class($userClass));
Signature (pseudo-code):
function new ($object, ... $args) {
assert(is_object($object) || is_string($object));
assert(!is_resource($object));
if (is_object($object)) {
$objectClass = get_class($object);
return new $objectClass(... $args);
}
return new $object(... $args);
}
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=70413&edit=1