You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中使用array_map报错:回调无效,Search类无wishList方法

解决array_map回调错误:class 'Search' does not have a method 'wishList'

这个问题我之前在项目里也碰到过,咱们一步步拆解排查:

核心错误原因

array_map() 抛出这个错误,本质是当前$this指向的Search类实例,找不到你指定的wishList方法——要么是方法没定义在这个类里,要么是访问权限不够,还有可能是拼写细节出了问题。

具体排查&解决步骤

1. 先确认方法的定义位置

检查你的wishList方法是不是确实写在Search类内部。如果这个方法是定义在其他类(比如某个控制器、模型或者父类)里,那array($this, 'wishList')这个回调肯定会失效——因为$this是Search类的对象,它根本没这个方法。

  • 如果方法在另一个类的实例上,比如你有个$wishlistHandler对象,那回调要改成array($wishlistHandler, 'wishList')
  • 如果是静态方法,就用['TargetClassName', 'wishList']或者'TargetClassName::wishList'

2. 检查方法的访问权限

PHP里,类方法如果是private或protected,外部(包括array_map这种回调调用)是无法访问的。你原来的方法定义没有加访问修饰符,虽然PHP默认是public,但保险起见,显式加上public更稳妥:

public function wishList($shop) {
    // 注意:你原来的代码里print_r(shops);少了$符号,要改成print_r($shop);
    print_r($shop);
    $this->check_authentication();
    $user = $this->getUser();
    $shop->isWishList = $this->Wishlist_model->_isShopInMyWishList($shop->id, $user->id, 6) ? true : false;
    return $shop;
}

另外提个小bug:你方法里的print_r(shops)漏了$,会触发Undefined constant 'shops'的错误,记得补上。

3. 核对方法名的大小写

PHP在Windows环境下方法名不区分大小写,但在Linux/macOS是严格区分的。确认你调用的'wishList'和定义的function wishList(...)大小写完全一致——比如别把wishList写成wishlist或者WishList。

4. 确认$this的指向是否正确

如果这段array_map代码是在Search类的方法里,但wishList是父类的方法,那要确保父类的wishList是public权限,而且子类没有覆盖这个方法导致它“消失”。

最常见的解决场景

大部分情况下,要么是你把wishList方法写到了错误的类里,要么是方法的访问权限不是public。先检查这两点,基本就能搞定问题。

内容的提问来源于stack exchange,提问作者dev dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:45:29