我无法理解为什么这个变量在这个类中没有工作,出现以下错误:
Parse error: syntax error, unexpected '$_SERVER' (T_VARIABLE)
我读到它应该按照以下方式使用:$this->url()
但似乎PHP不允许变量或类内的超级全局,有没有办法解决这个问题?
class socialCounter
{
public $url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
public function getPlus()
{
$html = file_get_contents( "https://plusone.google.com/_/+1/fastbutton?url=".urlencode($this->url());
libxml_use_internal_errors(true);
$doc = new DOMDocument(); $doc->loadHTML($html);
$counter=$doc->getElementById('aggregateCount');
return $counter->nodeValue;
}
public function getTweets(){
$json = file_get_contents( "http://urls.api.twitter.com/1/urls/count.json?url=".$this->url() );
$ajsn = json_decode($json, true);
$cont = $ajsn['count'];
return $cont;
}
}
答案 0 :(得分:4)
PHP manual page on properties:
[属性]声明可能包含初始化,但此初始化必须是常量值 - 也就是说,它必须能够在编译时进行评估,并且必须不依赖于运行时信息才能进行评估
要执行您尝试的操作,您可以在构造函数中初始化它:
class socialCounter
{
public $url;
public function __construct()
{
$this->url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
}
...
注意:您在getPlus(){...}
行末尾的$html = file_get_contents(...
中也错过了一个右括号。
答案 1 :(得分:2)
你应该在像这样的类中使用superglobals
class socialCounter
{
private $_httphost;
private $_phpself;
public function __construct()
{
$this->_httphost = $_SERVER['HTTP_HOST'];
$this->_phpself = $_SERVER['PHP_SELF'];
//use these variables inside your class functions
}
}
答案 2 :(得分:1)
你不能像这样分配$url
变量。如果你想这样做,我想你应该想在构造函数上调用它。
private $url;
public function __construct()
{
$this->url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
}
试试这个。