Re: Integerübergabe ByRef
Verfasst: 30.07.2017 20:44
Wieso?Kurzer hat geschrieben:Ich versuche die PHP Syntax gerade mit Macros zu imitieren ...
Wieso?Kurzer hat geschrieben:Ich versuche die PHP Syntax gerade mit Macros zu imitieren ...
OK, das überzeugt mich auch.... wenn per Macro syntaktischer Zucker verstreut wird. Das macht es nur mühsamer, wenn nach ein paar Jahren ein Code angepasst werden muss ...
Keine gute Idee. Es ist auf Grund der Typsicherheit immer logischer, von einer strikt oder stark typisierte Sprache in eine weniger typisierte Sprache zu übersetzen. Nicht umgekehrt. Denn das Verhalten von PHP zu emulieren, macht recht wenig Sinn. Im übrigen kannst du ByRef theoretisch mit den Scope-Schlüsselwörtern emulieren. Stichwort "Shared".Kurzer hat geschrieben:Weil ich es elegant finde und wissen wollte, ob man es mit vertretbarem Aufwand in PB irgendwie hinbekommt.
Mittlerweile (also schon nach ziemlich kurzer Zeit) bin ich jedoch auch Josh's Meinung und habe es aufgegeben das mit Macros hinzuwursten. Ich mach es nun doch so wie von PB vorgesehen.
Was soll denn sonst bei $variable + 20 herauskommen? Der arithmetische Operator sorgt dafür, das $variable automatisch in einen Integer gecastet wird. Würdest du statt + den . nehmen, dann würde da "10020" herauskommen, weil durch den Verkettungsoperator die 20 automatisch in einen String gecastet wird. Wenn du dieses verhalten unterbinden willst und dir eine gesteigerte Typsicherheit geben willst, dann arbeite strikt mit Type-Hinting und vor allem setze den STRICT-Mode. Denn dann werden Variablen und werte nicht mehr gecastet und "100" + 20 erzeugt einen Fehler.Kurzer hat geschrieben:Allerdings stelle ich fest, je tiefer ich in PHP einsteige, desto verwöhnter wird man. Auf der anderen Seite finde ich diese Typenlosigkeit bei PHP (nennt man das so?) extrem gewöhnungsbedürftig. Aus Sicht eines PB Programmierers kommt mir das irgendwie gefährlich vor, wenn man $variable = "100" schreiben kann und in der nächsten Zeile dann schon wieder echo $variable + 20; und es kommt tatsächlich 120 bei raus.
Auch hier hilft der STRICT-Mode. Ansonsten sehe ich da kein Problem.Kurzer hat geschrieben:Das hat zur Folge, das Vergleiche dort auch verschiedene "Tiefen" von Übereinstimmung kennen.
So gibt ein if ($variable == 100) ein TRUE zurück, weil irgendwie on the fly von String "100" nach integer gecastet wird. Ein if ($variable === 100) gibt jedoch ein FALSE zurück, weil dort auch die Typen beider Seiten identisch sein müssen (also der Typ der Stringvariablen $variable und der Integerkosntanten 100) - man beachte das dreifache Gleichheitszeichen.
Ich hab mich dran gewöhnt, aber den praktischen Vorteil sehe ich da noch überhaupt nicht. Aber ich bin ja auch erst seit 2,5 Wochen dabei, bei PHP.![]()