0

HTML レンダリング用のクラス定義を (動的な方法で) 含めるための PHP (5.4.4) クラスを実装しているので、2 つのボタン、4 つのテキスト入力、およびチェックボックスを含むフォームがある場合は、.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 が配列であると想定し、34行目のD:\apache\htdocs\webapps\skeleton\assets\scripts\manager.phpで指定された null

次のように、テスト コードで $components を空白で区切られたリストとして渡します。

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

私の意図は次のように指定することです: if the component list is not empty , 入力されたコンポーネントを含む配列を提供し、コンポーネントのそれぞれについて、コンポーネント配列にまだ存在しない場合にのみ挿入します。

私は何を間違っていますか?

4

1 に答える 1

4

明らかに、コンストラクターが開始$this->componentsnull、 を介してそれにアクセスしようとしていますaddComponents()

おそらく$this->components = array();、リストが空の配列として開始されるように開始するつもりだったので、それを使用できるようになりin_array()ましたか?

于 2012-06-16T21:57:41.107 に答える