PHP altsınıf ortak değişken ebeveyn tarafından belirlenen erişemiyor

0 Cevap php

Ben genel olarak PHP ve OOP çok yeniyim. Ben onlar indi ne URL dayalı doğru bağlantı kullanıcıyı yönlendirme olacağı bir çerçeve için CodeIgniter'ı kullanıyorum, ve şu anda bir sınıf 'BuildLinks' oluşturmak için çalışıyorum.

Fonksiyonu build_afflink () değişk1 dayalı yeni aramak için hangi sınıf seçer iken kontrolör, sınıfa doğru değişkenleri geçer

Kontrolör:

    function out($var1, $var2)
{
    // redirect to link after parsing data
    $debug='1';
    $params = array('var1'=>$var1, 'var2'=>$var2);
    $this->load->library('BuildLinks', $params);
    if ($debug=='0'){
        $redirect = $this->buildlinks->build_afflink();
        redirect($redirect, 'location', 301);
    }
    else {
        var_dump($this->buildlinks->build_afflink());
    }

}

Sınıf BuildLinks bir çalışmadır ... ama ben desteklemek için gereken diğer tüm siteleri tarafından uzatıldı.

BuildLinks sınıfı:

    class BuildLinks
{
    public $var1;
    public $var2;
    public $link;
    function __construct($params)
    {
        //populate up inititial variables from $params array (passed from controller)
        $this->var1 = (string)$params['var1'];
        $this->var2 = (string)$params['var2'];
        echo __class__ . ' loaded....' . 'var1: '.$this->var1 . '    var2: ' .$this->var2. '<br/>';

    }
    public function get_var1()
    {
        return $this->var1;
    }

    public function set_var1($var1)
    {
        $this->var1 = $var1;
    }

    public function get_var2()
    {
        return $this->var2;
    }

    public function set_var2($var2)
    {
        $this->var2 = $var2;
    }


    function build_thelink()
    {
        switch ($this->var1) {
            case 'amazon':
                //echo 'Amazon is our vendor.<br>';
                $newobj = new Amazon;
// Amazon subclass returns the correct affiliate link

                return $newobj->affiliate_link();
                break;
            case 'ebay':
                $newobj = new Ebay;
         //ebay subclass however, cannot access the public var var1, it returns a null value for $this->var1
                return $newobj->affiliate_link();
                break;
        }

    }
}

Ben yeni bir Ebay nesne yapmak Esasen, bu üst sınıf BuildLinks gelen kamu değişkenlerin herhangi erişemez. Ben yanlış ne yapıyorum?

Bu örnekte, ben ilk değişkenleri oluşturmak ve hata ayıklama için bazı bilgileri geri echo.

Ben değiştirmek EDIT: ise __ inşa okumak için:

    function __construct($params)
    {
        //populate up inititial variables from $params array (passed from controller)
        $this->var1 = (string)$params['var1'];
        $this->var2 = (string)$params['var2'];
        echo __class__ . ' loaded....' . 'var1: '.$this->var1. '    var2: ' .$this->var2 . '<br/>';
        var_dump(get_class_vars(get_class($this)));
}

Sonra bir çıkış olarak bu olsun:

    BuildLinks loaded....var1: ebay var2: somedata

array
  'var1' => null
  'var2' => null
  'link' => null

Aşağıdaki işler ince:

$newobj = new Amazon;
return $newobj->affiliate_link();

Bu değil, ama sınıflar hemen hemen aynıdır ...

$newobj = new Ebay;
return $newobj->affiliate_link();

İşte ebay sınıftır:

  class Ebay extends BuildLinks
{
    private $res;
    //TODO: language/multiple site support
    //public $locale;
    function __construct()
    {
        //echo __class__ . ' loaded....' . 'vendor: '.$this->vendor . '    isbn: ' .$this->isbn . '<br/>';               
    }

    function add_to_cart_button($isbn, $locale)
    {
    }
    function affiliate_link()
    {
        $this->get_info();
        return $this->link;
    }
    // Load $this->api_call() and return Amazon SimpleXML response object, load variables
    function get_info()
    {
        $apicall = $this->api_call();
        //build variables
       foreach ($apicall->searchResult->item as $item) {
        $this->link = (string )$item->viewItemURL;
        }
    }

    // Generate API call and return simplexml object $res
    function api_call()
    {
        //build $apicall here
        $res = simplexml_load_file($apicall);

        // Check to see if the request was successful, else print an error
        if ($res->ack == "Success") {
            $this->res = $res;
            return $res;
        } else {
            echo 'api_call() unsuccessful';
        }
    }
}

0 Cevap