如何在扩展类公共变量中使用变量

时间:2012-04-04 05:24:29

标签: php oop class extends

有一个我正在使用的类,我在类中重写变量以将它们更改为我需要的值,但我也不确定是否或如何处理问题。我需要在类调用之前添加为每个URL生成的密钥。我无法修改类文件本身。

use Theme/Ride

class ETicket extends Ride {

  public $key='US20120303'; // Not in original class
  public $accessURL1 = 'http://domain.com/keycheck.php?key='.$key;
  public $accessURL2 = 'http://domain.com/keycheck.php?key='.$key;

}

我知道你不能在公共类变量的设置中使用变量。只是不确定以适当的格式实际做这样的事情的方式。

我的OOP技能很弱。我承认。因此,如果有人建议我可以在哪里阅读并获得线索,那么也会受到赞赏。我想我需要OOP来傻瓜。 = /

----更新---

初始RIDE类设置了2个网址。

public $accessURL1 = "http://domain.com/index.php";
public $accessURL2 = "http://domain.com/index2.php";

我要覆盖它们,以便RIDE类使用我的新域名。

我可以添加以下内容并且有效......

class ETicket extends RIDE {
    public $accessURL1 = 'http://mydomain.com/myindex.php';
    public $accessURL2 = 'http://mydomain.com/myindex2.php';
}

但是,当我覆盖它时,我还希望将来自其他地方的变量($ key)作为参数传递给URL,因此当我调用RIDE时,它在末尾有一个值为KEY的URL。 (?key = keyvalue)

1 个答案:

答案 0 :(得分:1)

您的关闭,如果您不想允许调用代码更改$键,您可以执行以下操作:

class ETicket extends Ride {

    public function getKey()
    {
        return 'US20120303';
    }       

    public function generateUrl()
    {
        return 'http://domain.com/keycheck.php?key=' . $this->getKey();
    }
}

// Calling code example
$eTicket= new ETicket();

// $key is a member of ETicket class, so just call on generateUrl which will 
// build and return the url
var_dump($eTicket->generateUrl());

您还可以通过添加公共设置者/获取者来允许调用代码在需要时更改密钥:

class ETicket extends Ride {

    protected $key;

    public function setKey($key)
    {
        $this->key = $key;
    }

    public function getKey()
    {
        return $this->key;
    }

    public function generateUrl()
    {
        return 'http://domain.com/keycheck.php?key=' . $this->getKey();
    }
}

// Calling code example
$eTicket= new ETicket();

$eTicket->setKey('US20120303');
var_dump($eTicket->generateUrl());

- 更新 -

有几个选项,您可以将密钥作为调用代码的一部分附加到您的网址,如下所示:

$eTicket= new ETicket();

$url = $ride->accessURL1 . '?key=US20120303';

或者,如前所述,使用一种方法(稍微改变直接接受键):

class ETicket extends Ride
{
    public function generateUrl($key)
    {
        return $this->accessURL1 . '?key=' . $key;
    } 
}

$eTicket= new ETicket();

$url = $eTicket->generateUrl('US20120303');

我想重点是,如果没有将变量连接到成员变量初始化,你就不能做你最初要求的事。