I think that it is good idea to write page on RFC wiki with detailed
descriptions, examples and motivations. I see that it can't be accepted in
nearest future, but let it be for history. :)
There is many open questions. I will try to resolve that I can.
>>> Bring a little Javascript into PHP?
>> In fact, I looked at Kotlin :)
> Kotlin does not modify classes.
> This sort of thing is sound in compiled languages like Kotlin and C#,
where
> this is really syntactic sugar for calling user-defined functions with
> object-like syntax - it's possible (and sound) *only* because these
> languages can resolve such calls at compile-time.
Yes, I understand it. At the beginning I'm trying to find way for Kotlin
style realization - function with receiver. But, unfortunately, it seems
almost impossible if keep it simple.
> where this is really syntactic sugar
Exactly. I'm positioning this as syntactic sugar. And very useful sugar I
hope.
> In dynamic languages like JavaScript, you're literally writing to a
> map of methods, which means execution order is critical, and overwrites
are possible
Need some advice. Why execution order is critical?
Inserting into `ce->functions_list` maked at compile time, and overwtites
will be checked at this time too.
> What's wrong with just calling a function and passing the object as
argument?
Nothing but aesthetic sense.
For example, PDO.
Classic way:
$stmt = $db->prepare($sql);
$stmt->execute();
$oneValue = $stmt->fetch(PDO::FETCH_NUMERIC)[0]??$default;
Standart function way
function takeOne($db, $sql, $default){
//see "classic way"
return $value;
}
$oneValue = takeOne($db, $sql, $default);
This is looks not good for me.
- 3 arguments
- no intuitive connection to $db
- "takeOne" placed in global functions scope for simple utility logic.
Proxy class method. Let me do not write monstrous wrapper over PDO?
Extension function style
function PDO->takeOne($sql, $default){
//see "classic way"
return $value;
}
$oneValue = $db->takeOne($sql, $default);
- Intuitive connection to $db.
- "takeOne" encapsulated inside PDO class