0

我正在尝试创建一个简单的示例 php 脚本,有一个用户类,然后是两个控制器。

把它想象成一个没有视图的 MVC。

目前我无法getUserId()在 内工作showUserId()usercontroller我做错了什么?

PHP

<?
class user{

    function getUserId(){

        return 1; //Simple Example
    }
}

class controller{

    function __construct(){

        $user = new User();
    }
}

class usercontroller extends controller{

    function __construct(){

        $user = new User();
    }

    function showUserId() {

        echo $user->getUserId();
    }
}
?>
4

4 回答 4

1

$user仅在__construct范围内可用。要在对象范围内可用,它必须作为成员绑定到对象:

$this->user = new User;

然后,您可以访问$this->user.

还建议将此成员作为类定义的一部分包括在内,这不仅是为了清楚起见,而且也是为了设置正确的访问修饰符。

于 2013-01-31T04:03:53.167 回答
1
class usercontroller extends controller{

    private $user;

    function __construct(){

        $this->user = new User();
    }

    function showUserId() {

        echo $this->user->getUserId();
    }
}

您需要将 $user 定义为控制器类的类属性,在构造函数中定义它,然后您可以在所有函数中使用它。

编辑;

是的,您可以在 oarent 中定义并在子构造函数中调用父构造函数,并使用它..

<?
class user{   
    function getUserId(){    
        return 1; //Simple Example
    }
}

class controller{
    protected $user;
    function __construct(){    
        $this->user = new User();
    }
}

class usercontroller extends controller{

    function __construct(){
        parent::__construct();
        //$user = new User();
    }

    function showUserId() {    
        echo $this->user->getUserId();
    }
}

$controller_instance = new usercontroller();
$controller_instance->showUserId();    
?>
于 2013-01-31T04:04:12.837 回答
1

在您的代码示例中, $user 作为 __construct() 函数中的局部变量存在。

如果您希望它成为类的一部分,首先使用该名称定义一个类属性,然后您可以使用 $this-> 语法来引用它。

class usercontroller extends controller {
    public $user;

    function __construct(){
        $this->user = new User();
    }

    function showUserId() {
        echo $this->user->getUserId();
    }
}

作为一个挑剔的旁注,您的“用户”类在您的代码示例中被定义为“用户”。我确定您打算将它们匹配,因为您没有询问脚本的解析错误。

于 2013-01-31T04:04:54.440 回答
1

我会从 中取出$user变量controller,因为我觉得它并不真正属于那里:

class controller
{
}

然后,在里面usercontroller我会传递一个用户对象作为依赖:

class usercontroller extends controller
{
    private $user;

    function __construct(User $user)
    {
        $this->user = $user;
    }

    public function showUserId() 
    {
        echo $this->user->getUserId();
    }
}

$c = new usercontroller(new User());
echo $c->showUserId();
于 2013-01-31T04:19:07.043 回答