困惑于php命名空间

时间:2013-10-14 18:14:13

标签: php namespaces

我的应用程序中有以下结构:

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

以下是用户文件夹中的Member.php

<?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;
    }
}

这是我的Member.php在tests文件夹中:

<?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("j2omrani@gmail.com");
if($member->getEmail() == "j2omrani@gmail.com")
    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";

当我想创建一个Object时,它抛出异常并说:

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

我的问题是如何使用命名空间调用测试文件夹文件中的成员对象?

2 个答案:

答案 0 :(得分:8)

  1. 您无法导入命名空间(import user)。您需要导入具体类(use user\Member
  2. 无需导入Member,因为它位于同一名称空间
  3. use语句不包含文件。你必须考虑某种自动加载。考虑PSR-0和/或Composer
  4. 要解决您的问题 ad hoc ,请使用include:

    include '../Member.php';
    

答案 1 :(得分:2)

您需要包含命名空间和类名: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:

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

$member = new Member();

我假设您还需要将以下内容添加到测试文件夹中的Member.php,如果您还没有:

include '../Member.php';

或者,您也可以使用自动加载器动态加载类/命名空间。

PHP自动加载课程:http://www.php.net/manual/en/function.spl-autoload-register.php