2013-10-14 5 views
5

Ho la seguente struttura nella mia app:Confuso con gli spazi dei nomi php

| 
|----user folder 
|  | 
|  |-----Member.php 
|  | 
|  |---- tests Folder 
|     | 
|     |-----Member.php 

Ecco il mio Member.php nella cartella utente:

<?php 

namespace user; 

class Member 
{ 
    private $firstName; 
    private $lastName; 
    private $email; 
    private $password; 
    private $cell; 

    public function __construct() 
    { 

    } 

    public function getFirstName() 
    { 
     return $this->firstName; 
    } 

    public function setFirstName($firstName) 
    { 
     $this->firstName = $firstName; 
     return TRUE; 
    } 

    public function getLastName() 
    { 
     return $this->lastName; 
    } 

    public function setLastName($lastName) 
    { 
     $this->lastName = $lastName; 
     return TRUE; 
    } 

    public function getEmail() 
    { 
     return $this->email; 
    } 

    public function setEmail($email) 
    { 
     $this->email = $email; 
     return TRUE; 
    } 

    public function getPassword() 
    { 
     return $this->password; 
    } 

    public function setPassword($password) 
    { 
     $this->password = $password; 
     return TRUE; 
    } 

    public function getCell() 
    { 
     return $this->cell; 
    } 

    public function setCell($cell) 
    { 
     $this->cell = $cell; 
     return TRUE; 
    } 
} 

E qui è la mia Member.php nella cartella test :

<?php 
/* 
* Member class getters and setters tests 
*/ 
namespace user; 
use user; 

$member = new Member(); 
$member->setFirstName("Javad"); 
if($member->getFirstName() == "Javad") 
    echo "Test code 1 passed"; 
else 
    echo "Test code 1 failed"; 

$member = new Member(); 
$member->setLastName("Akbari"); 
if($member->getLastName() == "Akbari") 
    echo "Test code 2 passed"; 
else 
    echo "Test code 2 failed"; 

$member = new Member(); 
$member->setEmail("[email protected]"); 
if($member->getEmail() == "[email protected]") 
    echo "Test code 3 passed"; 
else 
    echo "Test code 3 failed"; 

$member = new Member(); 
$member->setPassword("123456"); 
if($member->getPassword() == "123456") 
    echo "Test code 4 passed"; 
else 
    echo "Test code 4 failed"; 

$member = new Member(); 
$member->setCell("09121234567"); 
if($member->getCell() == "09121234567") 
    echo "Test code 5 passed"; 
else 
    echo "Test code 5 failed"; 

Quando voglio creare un oggetto viene generata un'eccezione e dice:

Fatal error: Class 'user\Member' not found in C:\xampp\htdocs\auto24\user\tests\Member.php on line 8 

La mia domanda è: come posso chiamare l'oggetto membro nei file della cartella di test utilizzando gli spazi dei nomi?

+0

Vi siete [leggere la documentazione] (http://uk3.php.net/manual/ it/language.namespaces.basics.php)? - 'user user \ Member;' – Orbling

+0

@Orbling, ho provato questo, ma dà lo stesso errore. – user2877011

+0

Provare a rimuovere la dichiarazione dello spazio dei nomi dal file di test/membro? – andig

risposta

8
  1. Non è possibile importare uno spazio dei nomi (import user). È necessario importare classi concrete invece (use user\Member)
  2. Non c'è bisogno di importare Member, dal momento che è nello stesso namespace
  3. use dichiarazione non include i file. Devi prendere in considerazione una sorta di autoloading. Considerare PSR-0 e/o Composer

Per risolvere il tuo problema ad hoc, uso comprendono:

include '../Member.php'; 
+1

Risposta migliore della mia, che ho quindi rimosso. – Bart

+0

ora dice Errore irreversibile: Dimensione di memoria consentita di 134217728 byte esauriti (tentativo di allocare 65488 byte) in C: \ xampp \ htdocs \ auto24 \ user \ Member.php sulla riga 19 – user2877011

+0

Questo è un problema con il codice. Non ci hai mostrato la riga 19! –

2

è necessario includere lo spazio dei nomi e il nome della classe: use user\Member;

Member.php:

namespace user; 
class Member 
{ 
    private $firstName; 
    private $lastName; 
    private $email; 
    private $password; 
    private $cell; 
    //and some other stuff 
} 

Member.php nella cartella test:

namespace user\tests\user; 
use user\Member; 

$member = new Member(); 

I Supponendo che sia necessario aggiungere anche quanto segue al test Member.php cartella s se non si dispone di:

include '../Member.php'; 

In alternativa si potrebbe anche usare un caricatore automatico per caricare classi/spazi dei nomi al volo.

classi PHP Caricamento automatico: http://www.php.net/manual/en/function.spl-autoload-register.php

+0

non funziona, potresti fornirmi il codice in modo da capire chiaramente? – user2877011

+0

Aggiornato la mia risposta. –