2012-04-04 125 views
2

有一个我正在使用的类,我重写了类中的变量以将它们更改为我需要的值,但我也不确定是否或如何处理问题。我需要在类调用它们之前为每个这些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 for Dummies。 =/

----更新---

最初的RIDE类有2个URL集。

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

不过,我也想从其他地方($键)作为参数传递变量到URL时,我重写它们,所以当我调用RIDE它在最后有一个值为KEY的URL。 (?关键=键值)

回答

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()); 

您也可以允许调用代码来改变关键如果需要的话,加入一个公共的setter /吸气:

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()); 

- UPDATE -

有几个选项,您可以APPE第二关键看你的URL作为调用代码的一部分,就像这样:

$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'); 

我猜问题是,如果没有将变量连接到成员变量初始化,您无法完成原来要求的操作。

+0

嗨,这个答案有帮助吗? – 2012-04-05 03:58:53

+0

对不起,延迟回复。 我得到你在做什么,但不知道如何在我使用的环境中实现它。我猜测这是我对这个问题的描述,我似乎有。 我会尽量扩大最初的问题。 – 2012-04-10 05:11:49