2012-05-31 41 views
5

vì vậy tôi đang cố gắng giải quyết vấn đề tôi đang gặp phải khi thiết kế các lớp PHP. Tôi đã tạo một lớp cơ sở và gán các biến riêng. Tôi có các lớp con mở rộng lớp cơ sở này, làm cho tham chiếu và thay đổi các biến riêng này thông qua các hàm của lớp cơ sở. Dưới đây là một ví dụ, hãy nhớ tôi vẫn còn bối rối về sự khác biệt giữa privateprotected phương pháp/biến (cho tôi biết nếu tôi đang làm nó sai!):PHP Truy cập biến riêng tư từ trẻ em

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!'); 
    } 
} 
?> 

Vì vậy, tôi mong đợi kết quả được hello! in trên màn hình - thay vì không có gì là. Có thể có một sự hiểu lầm cơ bản về các lớp học về phía tôi, hoặc có lẽ tôi đang làm điều gì đó sai trái. Bất kỳ hướng dẫn nào được đánh giá rất nhiều! Cảm ơn.

EDIT:

Cảm ơn bạn để tất cả mọi người đã đóng góp một câu trả lời - Tôi nghĩ rằng, bất chấp những giải pháp tuyệt vời, đó là lớp con thực sự không phải là điều tôi cần - có vẻ như ủy lớp có thể hữu ích hơn vào thời điểm này, như Tôi không thực sự cần tham khảo các hàm cơ sở từ bên trong các lớp khác.

+1

thử vang ($ sub-> getTest()); – bumperbox

+1

Thử [PHP5 OOP] (http://www.php.net/oop5). – meze

+1

Không có bất kỳ 'echo' hoặc' print' nào xuất ra một cái gì đó trên màn hình – zerkms

Trả lời

8

nên được như thế này:

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

mã chính:

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

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

Tôi cũng sẽ thay thế 'parent ::' bằng '$ this->' – zerkms

+0

Ok, tôi có thể thấy tại sao nó hoạt động như trái ngược với cái tôi nghĩ. Có cách nào tôi có thể tham chiếu hàm setTest của cha mẹ từ hàm con, sao cho mã '$ this-> test = $ value' đặt biến cho cha mẹ, trái ngược với con? Cuối cùng tôi muốn không phải thực hiện cuộc gọi nếu tôi có thể làm cho họ từ nhà xây dựng của đứa trẻ. Về cơ bản tôi muốn truy cập các chức năng cha mẹ, không kế thừa chúng. – iLoch

+0

@ iLoch Tôi không hoàn toàn hiểu ý của bạn, nhưng hãy xem mã đã chỉnh sửa của tôi. Đó là những gì bạn muốn? – flowfree

Các vấn đề liên quan