[php] namespace

Struktura datotek na disku:
- /lib/
- /lib/Testclass.php
- /index.php

Vsebina lib/Testclass.php:

<?php
namespace lib;  
class Testclass{
    public function say(){
        say_func();
        \test1::say();
    }
}
?>

Vsebina index.php:

<?php
spl_autoload_register();
class test1{
    static public function say(){
        echo 'hello from static';
    }
}
function say_func(){
    echo 'hello from function';
}
$o = new lib\Testclass();
$o->say();
?>

Napisal sem en simple primer, ki deluje.

Moje vprašanje pa je ali obstaja način, da bi v Testclass.php poklical test1::say(); namesto \test1::say();
Tako kot deluje npr. klic globalne funkcije say_func() definirane v index.php

Moj neuspešen poskus je bil dodati v Testclass.php:

namespace lib;
use \;
use \*;

Torej, želim klicati razrede definirane izven namespacov v razredu znotraj namespaca brez začetnega '\', tako kot to deluje za navadne funkcije.

7 odgovorov

uspešen poskus bi bil:

use test1;
1

U, carsko!! Škoda, da ti lahko samo 1 plus pritisnem. ;)
Hvala

edit:
Sedaj imam pri vsakem controllerju
use GET,POST,....;
A bi se dalo to v kak autoloader vključit oz. nekako avtomatsko uporabit, da nebi bilo potrebno vsakič "use" vrstice napisat?

Čak zakaj pa maš ti "use GET, POST, ..."? To se mi zdi nekam čudno ;)

Drugače pa se use upošteva glede na datoteko. Se pravi ne moreš dat use v nek header.php in tega povsod vključit. Potrebno je v vsaki datoteki uporabiti svoj use.

GET in POST sta classa, s katerima handlam $GET in $POST requeste.

da ne boš tople vode izumljal... symfony2 HttpKernel oz HttpFoundation mogoče? Pa še njihov loader kot autoloader?

1

@krho: yesss dober nasvet, hvala.

"use" rabiš samo, če želiš v nadaljevanju (v isti datoteki) uporabljati samo dejansko ime ali nek alias, brez da bi eksplicitno navedel namespace, kjer class prebiva.

Ko class postaviš enkrat v en namespace, ga boš moral vedno referencirati, razen takrat, ko si (oz. je scope) v istem.