PHP的in_array()方法告诉我,我传递的是null值,而不是,提示?

时间:2012-06-16 21:53:29

标签: php arrays class components

我正在实现一个PHP(5.4.4)类,用于包含HTML呈现的类定义(以动态方式),所以如果我有一个带有两个按钮,四个文本输入和一个复选框的表单,我只需要包含.php文件对应于表单,文本框和按钮,而不是其他任何内容(每个HTML对象都用类表示)。

但我有一个问题......我创建了一个名为ComponentManager的类来管理加载过程,使用以下代码:

    class ComponentManager {
    // component manager properties
    protected $components;

    // constructor for this object
    public function __construct() {
        if (!empty($_SESSION['components'])) {
            $this->components = explode(" ", $_SESSION['components']);
        } else {
            $this->components = null;
        }
    }

    // destructor for this object
    public function __destruct() {
        $this->components = null;
    }

    // getter for this object
    public function __get($property) {
        if ($property === "components") {
            return $this->components;
        }
    }

    // addComponents - add components to the current components list
    public function addComponents($components) {
        if (!empty($components)) {
            $list = explode(" ", $components);

            $count = sizeof($list);
            for ($i = 0; $i < $count; $i++) {
                if (!in_array($list[$i], $this->components)) {
                    $this->components[] = $list[$i];
                    $component = null;

问题是我似乎在使用in_array()函数失败了,我不知道为什么......我的意思是,我过去曾经多次使用它来处理不同的事情,但一直告诉我这个:

  

警告:in_array()期望参数2为数组,在 D:\ apache \ htdocs \ webapps \ skeleton \ assets \ scripts \ manager.php 中给出null在线 34

我将测试代码中的$ components作为以空格分隔的列表传递,如下所示:

$page->addComponents("form checkbox textbox button range number");

我的目的是指定:如果组件列表不为空,请给我一个包含输入组件的数组,并为每个组件插入当且仅当它尚未出现在组件数组中。

我做错了什么?

1 个答案:

答案 0 :(得分:4)

显然,您的构造函数会向$this->components发起null,然后您尝试通过addComponents()访问该$this->components = array();

您可能打算将其发送到in_array(),以便列表以空数组开头,从而允许您在其上使用{{1}}?