Php 父/子类出现无法解释的错误

Php 父/子类出现无法解释的错误,php,runtime-error,Php,Runtime Error,我有一个问题,无法解释的异常是抛出下面的类 <?php abstract class Search_Options { protected $options = array(); public function __construct($options = array()) { foreach ($options as $option => $value) { $this->setOption($option, $va

我有一个问题,无法解释的异常是抛出下面的类

<?php
abstract class Search_Options {

    protected $options = array();

    public function __construct($options = array()) {
        foreach ($options as $option => $value) {
            $this->setOption($option, $value);
        }
    }

    public function getOption($option) {
        return $this->options[$option];
    }

    public function setOption($option, $value) {
        $option = strtolower($option);
        if (array_search($option, $this->allowed)) {
            $this->options[$option] = $value;
            return $this;
        }
        throw new Exception($option." is not allowed.");
    }

    public function build() {
        return $this->options;
    }

    protected function between($x, $y, $z) {
        return (($x <= $y) && ($y <= $z));
    }
}

class Artist_Search extends Search_Options {

    protected $allowed = array(
        "bucket",
        "results",
        "start",
        "limit"
    );

    public function bucket($bucket) {
        $bucket = (!is_array($bucket)) ? array($bucket) : $bucket;
        return $this->setOption("bucket", $bucket);
    }

    public function results($results) {
        if ($this->between(0, $results, 100)) {
            return $this->setOption("results", $results);
        }
        throw new Exception("results must be between 0..100, supplied ".$results);
    }

    public function start($start) {
        return $this->setOption("start", $start);
    }

    public function limit($limit) {
        if (is_bool($limit)) {
            return $this->setOption("limit", $limit);
        }
        throw new Exception("limit must be true|false, supplied ".$limit);
    }
}
?>
但是,当我尝试同时调用Artist_Search::bucket()时,我得到一个错误。。。见示例:


在数组中使用
而不是
array\u search


在您的情况下,
array\u search
返回
0
(因为
bucket
是数组的第0个元素)-对于
如果

使用
在数组中
而不是
array\u search
,它被强制转换为
false

在您的情况下,
array\u search
返回
0
(因为
bucket
是数组的第0个元素)-对于
if

$s = new Artist_Search();
$q = $s->results(10)->start(5)->limit(true)->build();
print_r($q);

Array
(
    [results] => 10
    [start] => 5
    [limit] => 1
)
$s = new Artist_Search();
$q = $s->bucket(array("familiarity"))->results(10)->start(5)->limit(true)->build();

print_r($q);

Fatal error: Uncaught exception 'Exception' with message 'bucket is not allowed.' in /t.php:22
Stack trace:
#0 /t.php(45): Search_Options->setOption('bucket', Array)
#1 /t.php(68): Artist_Search->bucket(Array)
#2 {main}
  thrown in /t.php on line 22