将URL参数传递给类

时间:2015-03-26 01:30:06

标签: php oop

如何将URL参数传递给PHP中的类?

$questionID = isset($_GET['question']) ? ($_GET['question']) : 0;

class Question {    
    public function __construct() {
        $this->id = $questionID;
    }

它说$ questionID在构造函数中是未定义的。

2 个答案:

答案 0 :(得分:1)

$_GET可全局访问,但$questinID不是。

您可以做的是从班级中访问$_GET

class Question {    
    public function __construct() {
        $this->id = isset($_GET['question']) ? $_GET['question'] : 0;
    }
 }

或者将它传递给构造函数。

$questionID = isset($_GET['question']) ? ($_GET['question']) : 0;
class Question {    
    public function __construct($questionID) {
        $this->id = $questionID;
    }
}
$question = new Question($questionID);

第二种方法是首选方法,因为它允许您以更灵活的方式创建问题,例如,可以更轻松地创建单元测试。

答案 1 :(得分:1)

有三种方法可以获得数据:

<强> 1。访问构造函数中的$ _GET数据:

class Question {    
    public function __construct() {
        $this->id = isset($_GET['question']) ? $_GET['question'] : 0;
    }
 }

<强> 2。将变量作为构造函数参数传递:

class Question {    
    public function __construct($questionId) {
        $this->id = $questionID;
    }
}

然后在初始化新问题时传递值:

$question = new Question($_GET['question']);

第3。使用setter在创建对象后设置值:

class Question {
    public function setId($questionId) {
        $this->id = $questionId
    }
}

然后在初始化问题后设置值:

$question = new Question();
$question->setId($_GET['question']);

如果您完全确定获取ID的方式永远不会改变(这不常见),请使用第一种方法。

如果您确定该类在每种情况下都需要ID,请使用第二种方法。

如果类可能需要或可能不需要ID,或者如果您需要在对象生命周期内更改ID的方法,请使用第三种方法。

相关问题