PHP

2012-05-31 26 views
5

çocuktan özel değişken erişim, bu yüzden PHP sınıflarını tasarlarken karşılaştığım bir sorunu çözmeye çalışıyorum. Bir temel sınıf oluşturdum ve özel değişkenler atadım. Bu temel sınıfı genişleten alt sınıflarım var, bu da temel sınıfın işlevleri aracılığıyla bu özel değişkenlere referans ve değişiklikler yapıyor. İşte bir örnek ben hala private ve protected yöntem arasındaki fark hakkında karıştı akılda tutmak, var/değişkenleri (ben yanlış yapıyorum bana bildirin!):PHP

base.class.php

<?php 
class Base { 
    private $test; 
    public function __construct(){ 
     require('sub.class.php'); 
     $sub = new Sub; 
     echo($this->getTest()); 
    } 
    public function getTest(){ 
     return $this->test; 
    } 
    protected function setTest($value){ 
     $this->test = $value; 
    } 
} 
?> 
sub.class.php

<?php 
class Sub extends Base { 
    public function __construct(){ 
     parent::setTest('hello!'); 
    } 
} 
?> 

Yani sonuç ekrana yazdırılacak hello! olmasını beklediğiniz - yerine bir şey yok. Benim üzerimde sınıfların yanlış anlaşılması olabilir ya da belki yanlış bir şey yapıyorum. Herhangi bir rehberlik çok takdir edilmektedir! Teşekkürler.

DÜZENLEME:

bir cevap emeği geçen herkese teşekkür ederim - mükemmel çözümlere rağmen, o çocuk sınıfları ihtiyacım olmayan neyi aslında, bence - noktada daha faydalı olabilir sınıfları temsilci görünüyor gibi Baz fonksiyonlarını diğer sınıflardan referans almaya ihtiyacım yok.

+1

deneyin yankı ($ alt> getTest()); – bumperbox

+1

[PHP5 OOP] 'ı deneyin (http://www.php.net/oop5). – meze

+1

Ekranda bir şey çıktı almak için hiçbir “echo” veya “print” yok – zerkms

cevap

8

böyle olmalı:

base.class.php:

class Base { 
    private $test; 
    public function __construct() { 
     echo $this->getTest(); 
    } 
    public function getTest() { 
     return $this->test; 
    } 
    protected function setTest($value) { 
     $this->test = $value; 
    } 
} 

sub.class.php:

class Sub extends Base { 
    public function __construct() { 
     parent::setTest('hello!'); // Or, $this->setTest('hello!'); 
     parent::__construct(); 
    } 
} 

ana kod:

require 'base.class.php'; 
require 'sub.class.php'; 

$sub = new Sub; // Will print: hello! 
+2

Ben de ebeveynin '' $ $ bu '> – zerkms

+0

ile değiştiririm Tamam, sanırım bunun benim için ters olarak çalıştığını düşünüyorum. Çocuk fonksiyonundan ebeveynin setTest fonksiyonunu referans gösterebilmem için herhangi bir yol var mıdır? Böylece, '$ this-> test = $ value' kodu, çocuğa göre ebeveyn için değişkeni belirler mi? Sonunda, çocuğun kurucusundan yapabilirsem, arama yapmak zorunda kalmamayı isterdim. Temel olarak ana işlevlere erişmek istiyorum, onları devralmamaları. – iLoch

+0

@iLoch Neyi kastettiğinizi tam olarak anlayamıyorum, fakat düzenlenmiş koduma bir göz atın. İstediğin bu mu? – flowfree