从 child 访问 PHP 私有(private)变量

标签 php oop class private protected

所以我正在尝试解决我在设计 PHP 类时遇到的问题。我创建了一个基类,并分配了私有(private)变量。我有扩展这个基类的子类,它们通过基类的函数对这些私有(private)变量进行引用和更改。这是一个示例,请记住,我仍然对 privateprotected 方法/变量之间的区别感到困惑(如果我做错了请告诉我!):

基类.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;
    }
}
?>

子类.php

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

所以我希望结果是 hello! 打印在屏幕上 - 而不是什么都没有。我可能对类(class)有根本性的误解,或者我只是做错了什么。非常感谢任何指导!谢谢。

编辑:

感谢所有提供答案的人 - 我认为,尽管有出色的解决方案,但实际上子类并不是我所需要的 - 似乎委托(delegate)类在这一点上可能更有用,因为我真的不需要从其他类中引用 Base 函数。

最佳答案

应该是这样的:

基类.php:

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

子类.php:

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

主要代码:

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

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

关于从 child 访问 PHP 私有(private)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10827101/

相关文章:

php - 如何在简单的 php 函数中使用 "Dependency Injection",我应该打扰吗?

php - 检查页面是父页面还是子页面?

PHP - 将 PDO 与 IN 子句数组一起使用

php - 从包含已删除记录的表中选择随机行

javascript - Node.js - JSON.parse - 将 Node 添加到结果中

r - 扩展 R S4 对象以具有新插槽并保持原始对象以相同方式工作

java - 如何从扩展同一类的多个类中调用函数

c++ - 什么时候在 C++ 中使用 struct over class

class - 在 ANT 中制作 JAR 时如何有条件地包含 list 选项

没有显式外键关系的 Linq To SQL