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

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

4

1 回答 1

1

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

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/getter 来允许调用代码更改密钥:

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

--更新--

有几个选项,您可以将密钥作为调用代码的一部分附加到您的 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');

我想重点是,如果没有将变量连接到成员变量初始化,您将无法执行您最初要求的操作。

于 2012-04-04T05:38:34.603 回答