Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]jak ta klasa działa bez "use", bez "include" ?
Forum PHP.pl > Forum > Przedszkole
andrzejdupa
przez całą moją "karierę programisty" spotykałem się wyłącznie z projektami zrobionymi na frameworku Symfony.

Przestrzenie nazw, "use", "namespace" widywałem i używałem naturalnie, nie wnikając za bardzo w temat.

i zgłupiałem gdy zobaczyłem taki przykładowy kod
  1. namespace SebastianBergmann\Money;
  2. class CurrencyTest extends \PHPUnit_Framework_TestCase
  3. {
  4. /**
  5.   * @covers \SebastianBergmann\Money\Currency::__construct
  6.   * @expectedException \SebastianBergmann\Money\InvalidArgumentException
  7.   */
  8. public function testExceptionIsRaisedForInvalidConstructorArgument()
  9. {
  10. new Currency(null);
  11. }
  12. /**
  13.   * @covers \SebastianBergmann\Money\Currency::__construct
  14.   */
  15. public function testCanBeConstructedFromUppercaseString()
  16. {
  17. $c = new Currency('EUR');
  18. $this->assertInstanceOf('SebastianBergmann\\Money\\Currency', $c);
  19. return $c;
  20. }
  21. ...


Jak to jest że poniższe działa bez wcześniejszego "use":
- extends \PHPUnit_Framework_TestCase
- new Currency(null);
kapslokk
- new Currency(null);
Działa bo jest w tym samym namespace co klasa CurrencyTest
-extends \PHPUnit_Framework_TestCase
działa bo jest \ na początku.

Jak Ty programowałeś w SF bez tych podstaw?

@Edit a bez include działa, bo pewnie jest włączony jakiś autoloader.
andrzejdupa

a zobacz, takich głupków jest przynajmniej 16264
http://stackoverflow.com/questions/4790020...h-do-in-php-5-3
(viewed: 16264 times)

edit:
nim zacznę czytać od nowa całą dokumentację o namespace, mógłby ktoś w międzyczasie napisać "jak deklaruje się globalny namespace"?
kapslokk
Nie deklaruje się. Jeśli stworzysz np klasę w pliku w którym nie masz namespace xxx; to będzie w globalnej przestrzeni.
andrzejdupa
nie czaję.


każda klasa stworzona bez namespace jest widoczna w innych plikach dzięki "\" przed nazwą?
kapslokk
Klasa1
  1. <?php
  2. namespace Jakas\Tam;
  3.  
  4. class Klasa1{
  5. }


Klasa2
  1. <?php
  2. class Klasa2{
  3. }


Klasa1 to tak naprawde \Jakas\Tam\Klasa1
Klasa2 to po prostu \Klasa2

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.