Wat mij in het begin niet direct duidelijk was, is het verschil in 'verwijsbriefjes' of references. Als je in Rust een object aanmaakt in een variabele, bevat die volgens de compiler het object zelf, en juist niet een verwijsbriefje zoals in PHP.
Rust:
struct A {}
fn doe(a: &A) {}
fn main() {
let a = A{}; // maak object
doe(a); // geeft fout
}
PHP:
<?php
class A {}
function doe(A $a) {}
$a = new A;
doe($a); // gaat goed
?>Daarna ging ik kijken wat je nog meer kan doen in PHP wat niet kan in Rust, zoals de functie aanroepen met verschil in hoofd- en kleine letters, een extra variabele aanmaken met hetzelfde verwijsbriefje, en het instellen van dynamische eigenschappen:
<?php
class A {}
function doe(A $a) {}
$a = new A;
doe($a);
$b = $a;
$b->eigenschap = true;
unset($a);
DoE($b, 'iets', 0, 123, $b, $a);
?>Het enige waarbij PHP mij als programmeur helpt is: "Warning: Undefined variable $a"
Maar sinds PHP 8.2rc1 komt daar deze melding bij:
"Deprecated: Creation of dynamic property A::$eigenschap is deprecated"
Dat scheelt bij het debuggen bij typfouten. Nu heb ik een class "cObject" waarop elk object moet extenden met daarin de __call() functie. Alleen zo krijg je in PHP 8.1 en eerder een melding bij een typfout.
Ligt het aan mij of gaat PHP de betere kant op?
Of zou het aan mij IDE (Eclipse PDT) liggen dat die voor dat soort dingen geen melding geeft? (Zijn er IDE's die dat wel doen?)