namespace en use gebruik
PS mijn mappen opbouw is als volgt:
\Library\
\Library\Cache\
\Library\Cache\Cache.php
\tmp\
index.php
Wil je een andere root hebben of ongeacht waar het bestandje staat kunnen openen? In dat geval zou ik in eerste instantie denken aan een loop functie die elk mapje afgaat.. Tevens vraag ik me af of dat niet een grote performance downgrade wordt..
Dus gewoon is_dir('tmp') in de class Cache kunnen uitvoeren en de melding krijgen dat de directory bestaat. Want hij bestaat ook, alleen door de namespace voert hij de is_dir niet uit in de root maar in Cache map
Kijk is naar realpath();
Mappenstructuur:
Ik heb de volgende class cache.phhp:
Code (php)
en index.php:
Want in cache.php kijkt hij of de dir bestaat vanuit de namespace. Dus hij bestaat niet, als ik namespaces weghaal kijkt hij uit de root en dan bestaat de dir wel. Dus hoe kan ik er voor zorgen dat de functies zoals is_dir en file_exists van uit de root bekijkt en niet vanuit de namespace (liefst geen absolute paden)?
Gewijzigd op 20/08/2012 11:30:17 door Joakim Broden
Hertog heb gekeken naar realpath? Dat geeft je een relative path zoals jij wilt. Op php.net heb je zelfs nog mooie voorbeeldjes ook
De eerste regel in mijn index.php (daar kom ik altijd binnen) is:
en als ik dan iets met het filesysteem wil doen dan doe ik dit
Blij wordt ik er niet van, maar ik heb geen enkele andere oplossing gevonden die goed werkt. $_SERVER["DOCUMENT_ROOT"] is deprecated en werkt bovendien niet in CLI
n.b. de autoloader heeft een mapping, waarin de namespace wordt bijgehouden en de folder waarin de namespace zich bevindt. Dus als je een classe wil creeeren bepaald de namespace in welke folder hij die classe gaat zoeken.
Gewijzigd op 20/08/2012 11:48:56 door John Berg
1 ) de functie glob gaat wel weer vanuit de root uit, ook al maak je gebruik van namespaces.
2 ) en de functies zoals file_exists en is_dir gaan weer van uit de namespace uit.
Waarom dan niet beide van uit de root, of beide van uit de namespace. Kan iemand mij de logica misschien vertellen waarom 1 van de root uit gaat en andere van uit de namespace?
Gewijzigd op 20/08/2012 12:14:05 door Joakim Broden
Hertog Jan op 20/08/2012 12:13:00:
Oke dan ga ik nu eerst gebruik maken van define('root') geval. Wat me wel opvalt is hoe vaag php soms is zoals:
1 ) de functie glob gaat wel weer vanuit de root uit, ook al maak je gebruik van namespaces.
2 ) en de functies zoals file_exists en is_dir gaan weer van uit de namespace uit.
Waarom dan niet beide van uit de root, of beide van uit de namespace. Kan iemand mij de logica misschien vertellen waarom 1 van de root uit gaat en andere van uit de namespace?
1 ) de functie glob gaat wel weer vanuit de root uit, ook al maak je gebruik van namespaces.
2 ) en de functies zoals file_exists en is_dir gaan weer van uit de namespace uit.
Waarom dan niet beide van uit de root, of beide van uit de namespace. Kan iemand mij de logica misschien vertellen waarom 1 van de root uit gaat en andere van uit de namespace?
Namespaces hebben helemaal NIETS met het onderliggende file systeem te maken. Namespaces zijn er om classes op een logische wijze te groeperen, en ervoor te zorgen dat eventuele duplicate class names toch mogen, elk in een andere namespace.
Alle file functies kunnen werken met relatieve en absolute paden. Relatief is vaak onduidelijk omdat je dan steeds moet weten waar je in het filesysteem staat. Met getcwd() kun je dat opvragen, en vanaf dat punt kun je een relatieve pointer naar een andere folder of file gebruiken. Dus een is uiteraard valide omdat dit een absoluut path is. Maar is ook valide en geeft ook alle txt bestanden in de folder bovenliggend aan de huidige directory.
Gewijzigd op 20/08/2012 12:37:27 door John Berg