[oop] keyword in mapnaam
Weet iemand een oplossing voor het volgende probleem?
Als ik een mapnaam gebruik met daarin een keyword, dan pikt de parser/tokenizer dat niet.
Ik heb dus een mapje "trait"...
/foo/trait/bar.php
En zodra ik nu die trait wil gebruiken, krijg ik een foutmelding. Weet iemand of hier een oplossing voor is? Of moet ik simpelweg het mapje anders noemen? Hetzelfde probleem heb ik als ik een mapje "interface" gebruik. Iemand een idee?
Gewijzigd op 25/04/2014 19:41:46 door Bas IJzelendoorn
Verzin andere namen.
Een map is per definitie een ding dat meerdere andere dingen bevat, of kan bevatten, dus je zou meervoud kunnen gebruiken: interfaces, traits, ...
(topic heropent)In het vervolg graag opletten met dubbele topics.[/modedit]
Gewijzigd op 25/04/2014 19:42:54 door Bas IJzelendoorn
Ik wil graag enkelvoud gebruiken in m'n namespace benamingen. Dus inderdaad... andere namen verzinnen dan maar. Wel raar/jammer overigens dat de parser hier niet mee om kan gaan.
en als je nou een hoofdletter gebruikt? dus: Foo/Trait/Bar?
Thanks voor de tip Frank. Dat had ik gisteren ook al geprobeerd, maar dat vind ie ook niet leuk. Het lijkt hoofdletterongevoelig te zijn.
Dit is niet raar, zoals ik in je andere topic al heb proberen uit te leggen. De PHP tokenizer split code in allemaal kleine stukjes en geeft ze een label: keyword, string, variable, ... Er is haast geen mogelijkheid voor de tokenizer om het verschil te zien tussen een klasse die "trait" heet of een "trait" definitie:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
class trait // ...
trait Foo // ...
// ontdek het verschil in "trait", die is er niet
?>
class trait // ...
trait Foo // ...
// ontdek het verschil in "trait", die is er niet
?>
Het was mooi geweest als de parser dat onderscheid had kunnen maken.
Overigens heeft iemand het wel pas in de internals proberen op te lossen, maar dat is afgewezen: https://wiki.php.net/rfc/keywords_as_identifiers
Geen idee hoe moeilijk dat is. Je zou zeggen dat als het woord "trait" onderdeel is van een path, dat ie het dan ook als zodanig zou moeten herkennen. Als je zegt $foo = 'foo\trait\blabla'; zal die ook zien dat het onderdeel is van een string. Maar goed. Het probleem kan niet opgelost worden, dus ik ga andere benamingen gebruiken.