PHP 面向对象问题

标签 php oop

这是我的父类:

class Model extends CI_Model
{
    protected $table, $idField='id';
    public $fields;

    function __construct()
    {
        parent::__construct();
        $this->fields  = new ValFieldGroup();
    }
    //Other Code
}

这是 ValFieldGroup 类的代码:

class ValFieldGroup
{
    private $fields = array();

    public function add($name, $rules = '', $label = '')
    {
        $this->fields[$name] = new ValField($name, $rules, $label);
    }

    public function __get($name)
    {
        if (isset($this->fields[$name]))
            return $this->fields[$name];
        else
            return false;
    }

    public function __set($name, $value)
    {
        $this->fields[$name] = $value;
    }

    public function getAll()
    {
        return $this->fields;
    }
}

这是我遇到错误的子类:

class User extends Model
{
    function __construct()
    {
        parent::__construct();

        $this->fields.add('first', 'required', 'First Name');
        // Snip
    }
    // Snip
}

运行此代码时出现以下错误:

Fatal error: Call to undefined function add() in \models\user.php..

User 类中的这一行:

$this->fields.add('first', 'required', 'First Name');

当我在这一行之前执行 print_r($this->fields) 时,我得到:

ValFieldGroup Object ( [fields:private] => Array ( ) )

很明显类正在设置,但我不能使用我想要的功能..我做错了什么?

最佳答案

除非 add 是全局范围的函数,否则我会说 fields.add() 应该是 fields->add()。点是 PHP 中的字符串连接运算符。

关于PHP 面向对象问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5680432/

相关文章:

php - Laravel 5 - 如何在同一张表上执行左连接

php - 使背景图像 SVG 像内联元素一样工作

PHP 将圣经搜索字符串解析/分解为变量或标记

java - 调用compareTo方法java问题

c++ - 父类范围内的子类

perl - 为什么这两个版本的代码都没有通过 -c Perl 检查?

python - 继承类属性而不声明属性或更好的 OOP

php - Laravel Ajax 响应和处理错误

php - 没有灰色背景

java - 使用通用与位置之间的区别