如何在类中包含变量并使用它?

时间:2015-10-16 05:09:55

标签: php

我无法理解为什么这个变量在这个类中没有工作,出现以下错误:

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

3 个答案:

答案 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'];
}

试试这个。