【问题标题】:Too few arguments to function php函数php的参数太少
【发布时间】:2021-01-17 13:41:08
【问题描述】:

我的控制器

class product extends Controller

{

function __construct()
{
}

public function index($id)
{

    $productInfo = $this->model->productInfo($id);
    print_r($productInfo);
    $this->view('product/index.php');
}

}

?>

我的模特

class model_product extends Model

{

function __construct()
{
    parent::__construct();
}


function productInfo($id)
{

    $sql = 'select * from tbl_product where id=:x ';
    $stmt = self::$conn->prepare($sql);
    $stmt->bindParam(':x', $id);
    $stmt->execute();
    $result = $stmt->fetch();

    return $result;

}

}

app.php

class App{


public $controller='index';
public $method='index';
public $params= [];

function __construct()
{
    if(isset($_GET['url'])){
        $url=$_GET['url'];
        $url=$this->parseUrl($url);
        $this->controller=$url[0];
        unset($url[0]);

        if (isset($url[1]))
        {
            $this->method=$url[1];
            unset($url[1]);

        }

        $params=array_values($url);

    }
    $controllerUrl='controlls/'.$this->controller. '.php.';
    if (file_exists($controllerUrl)){
        require ($controllerUrl);
        $object=new $this->controller;


        $object->model($this->controller);


        if(method_exists($object,$this->method))
            call_user_func_array([$object,$this->method],$this->params);
    }

}


function parseUrl($url){

    $url=filter_var($url,FILTER_SANITIZE_URL);
    $url=rtrim($url,'/');
    $url=explode('/',$url);
    return $url;
}

显示这个错误

致命错误:未捕获的 ArgumentCountError:函数 product::index() 的参数太少,在第 40 行的 C:\xampp\htdocs\hermesmvc\core\app.php 中传递了 0,而在 C:\xampp 中恰好是 1 \htdocs\hermesmvc\controlls\product.php:14 堆栈跟踪:#0 C:\xampp\htdocs\hermesmvc\core\app.php(40): product->index() #1 C:\xampp\htdocs\ hermesmvc\index.php(9): App->__construct() #2 {main} 在第 14 行的 C:\xampp\htdocs\hermesmvc\controlls\product.php 中抛出

【问题讨论】:

  • 这意味着当你调用你的函数索引时,你不提供任何参数。或者它是空的。当您设置index($id) 时,它会产生一个参数。如何调用函数索引?
  • 如果您向我们展示 app.php 的第 40 行,我们或许可以为您提供更具体的帮助
  • call_user_func_array([$object,$this->method],$this->params);这是我的 app.php 的第 40 行
  • 好吧,我错了...需要看到更多的行。我不知道那里发生了什么。但似乎 $this->params 可能是一个空数组或根本不是一个数组。它必须是一个只有一个值的数组。
  • 好的,我已经添加了 app.php,顺便说一句,我没有在我的视图文件中调用函数索引,但我只是将表从我的 db 插入到 php,当我使 $id 等于我的一个产品 'id' 错误消失了,它显示了数组

标签: php html model-view-controller


【解决方案1】:

将您的 app.php 中的 $params=array_values($url); 替换为 $this->params=array_values($url);

因为如果你没有在构造函数中设置$this->params,它将保持为空。很像你为方法和控制器所做的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 2017-04-01
    • 2018-04-22
    • 2021-03-19
    相关资源
    最近更新 更多