【问题标题】:How do I use a variable within an extended class public variable如何在扩展类公共变量中使用变量
【发布时间】:2012-04-04 05:24:28
【问题描述】:

有一个我正在使用的类,我正在覆盖类中的变量以将它们更改为我需要的值,但我也不确定是否或如何处理问题。我需要在类调用它们之前添加一个生成到每个 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 时,它的 URL 末尾带有 KEY 的值。 (?key=keyvalue)

【问题讨论】:

    标签: php oop class extends


    【解决方案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');
    

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

    【讨论】:

    • 嗨,这个答案有帮助吗?
    • 抱歉延迟回复。我明白你在做什么,但不确定如何在我使用的环境中实现它。我猜这是我对我似乎遇到的问题的描述。我将尝试扩展最初的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 2020-06-20
    相关资源
    最近更新 更多