我继承了一些用于与第三方集成的代码(Highrise CRM)。我在PHP的这一方面有点生疏,所以正在寻求一些帮助。
我想在一个类中分配一个会话变量。目前我有以下代码:
var $highrise_url = 'https://example.highrisehq.com';
var $api_token = 'foofoofoofoofoofoofoofoo';
var $task_assignee_user_id = 'foofoo';
但是我希望根据我从登录用户的数据库中提取的会话贵重物品来设置URL,令牌和ID,即
$_SESSION['hrurl']
$_SESSION['hrapi']
$_SESSION['hrid']
该类使用上面设置的变量,如:
$curl = curl_init($this->highrise_url.'/deals.xml');
我知道我不能在这样的类中设置变量:
var $highrise_url = $_SESSION['hrurl'];
那我该怎么办?
我相信它是通过使用构造函数来完成的,但我充其量只是摇摇欲坠,所以会很感激帮助:o)
非常感谢,
格里
答案 0 :(得分:1)
class HighriseClass {
var $highrise_url;
function __construct() {
$this->highrise_url = $_SESSION['hrurl'];
}
}
答案 1 :(得分:1)
听起来像是constructor:
的工作class A
{
public $highrise_url;
public $api_token;
public $task_assignee_user_id;
public function __construct()
{
$this->highrise_url = $_SESSION['hrurl'];
$this->api_token = $_SESSION['hrapi'];
$this->task_assignee_user_id = $_SESSION['hrid'];
}
}
$a = new A();
更好的解决方案可能是将值传递给构造函数:
public function __construct($highrise_url, $api_token, $task_assignee_user_id)
{
$this->highrise_url = $highrise_url;
$this->api_token = $api_token;
$this->task_assignee_user_id = $task_assignee_user_id;
}
...
$a = new A($_SESSION['hrurl'], $_SESSION['hrapi'], $_SESSION['hrid']);
第二种方式会减少您的班级和$_SESSION
数组之间的coupling。这样您就可以在不依赖会话功能的情况下使用(或测试)类。