[oop] keyword in mapnaam

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ozzie PHP

Ozzie PHP

25/04/2014 13:21:17
Quote Anchor link
Hey guys,

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
 
PHP hulp

PHP hulp

28/12/2024 06:22:52
 
Dos Moonen

Dos Moonen

25/04/2014 14:26:59
Quote Anchor link
Verzin andere namen.
 
Ward van der Put
Moderator

Ward van der Put

25/04/2014 14:29:40
Quote Anchor link
Een map is per definitie een ding dat meerdere andere dingen bevat, of kan bevatten, dus je zou meervoud kunnen gebruiken: interfaces, traits, ...
 
Wouter J

Wouter J

25/04/2014 14:32:43
Quote Anchor link
Het heeft geen nut om 2 topics over hetzelfde onderwerp te openen, laten we verder gaan in dit topic: http://www.phphulp.nl/php/forum/topic/keyword-interface/94497/

(topic heropent)In het vervolg graag opletten met dubbele topics.[/modedit]
Gewijzigd op 25/04/2014 19:42:54 door Bas IJzelendoorn
 
Ozzie PHP

Ozzie PHP

25/04/2014 20:46:08
Quote Anchor link
Dankjewel Dos en Ward,

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.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

25/04/2014 21:46:28
Quote Anchor link
en als je nou een hoofdletter gebruikt? dus: Foo/Trait/Bar?
 
Ozzie PHP

Ozzie PHP

25/04/2014 22:14:04
Quote Anchor link
Thanks voor de tip Frank. Dat had ik gisteren ook al geprobeerd, maar dat vind ie ook niet leuk. Het lijkt hoofdletterongevoelig te zijn.
 
Wouter J

Wouter J

25/04/2014 23:29:36
Quote Anchor link
> Wel raar/jammer overigens dat de parser hier niet mee om kan gaan.

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
class trait // ...
trait Foo // ...
// ontdek het verschil in "trait", die is er niet

?>
 
Ozzie PHP

Ozzie PHP

25/04/2014 23:58:06
Quote Anchor link
Ik snap wat je bedoelt Wouter, maar de class zelf noem ik ook niet trait. Ik noem de naam van een map "trait" waardoor "trait" dus een onderdeel van de namespace wordt.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php

use vendor\foo\trait\bar;

class Foo {

  use bar;

}

?>

Het was mooi geweest als de parser dat onderscheid had kunnen maken.
 
Wouter J

Wouter J

26/04/2014 00:02:31
Quote Anchor link
Ozzie, daar geldt natuurlijk hetzelfde voor. Ga jij preg_match maar eens uitleggen dat die "trait" daar niet hetzelfde is als de "trait" in een definitie. Dat is praktisch onmogelijk :)

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
 
Ozzie PHP

Ozzie PHP

26/04/2014 00:07:34
Quote Anchor link
>> Ga jij preg_match maar eens uitleggen dat die "trait" daar niet hetzelfde is als de "trait" in een definitie.

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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.