喜欢冬天的太阳 2018-10-08 17:31 采纳率: 0%
浏览 303

php 自动加载问题 private

//注册为自动加载
private static function autoload(){
// $arr = array(__CLASS__,'load');
spl_autoload_register('self::load');
}
//自动加载功能,此处我们只实现控制器和数据库模型的自动加载
//如GoodsController、 GoodsModel
private static function load($classname){
echo $classname;
die;
if (substr($classname, -10) == 'Controller') {
//载入控制器
include CUR_CONTROLLER_PATH . "{$classname}.class.php";
} elseif (substr($classname, -5) == 'Model') {
//载入数据库模型
include MODEL_PATH . "{$classname}.class.php";
} else {
//暂略
}
}

}

问题:
private 不是只能在类里面访问吗?这样注册自动加载为什么在外面能用呢?

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-06 22:29
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    private 修饰符在 PHP 中用于保护内部变量或函数,使其不能被外部代码直接访问。但是,在某些情况下,PHP 允许你使用 private 作为类成员的方法名。

    当你试图在一个私有方法(例如 autoload())上声明一个公共方法时,这将触发错误。这是因为 PHP 的命名空间系统不允许在同一个文件中定义两个同名的方法。

    在这个例子中,你的意图是在类之外定义了一个名为 autoload() 的私有方法,并希望它可以在类实例上调用。然而,由于 autoload() 方法的名字与类成员方法重名,因此在类外无法调用这个方法。如果你想要在类外调用这个方法,你需要确保没有其他地方使用了相同的名称来命名一个私有方法。

    为了解决这个问题,你可以创建一个新的类并重写 autoload() 方法,或者修改现有的类以避免冲突。例如:

    <?php
    namespace YourNamespace;
    use YourNamespace\YourClass;
    
    class MyClass {
        private static function autoload() {}
    
        public static function load($classname) {
            echo $classname;
        }
    }
    
    // 使用方法
    MyClass::autoload(); // 这个方法应该不会引发错误,因为它已经存在
    

    通过这种方式,你可以在类之外调用 autoload() 方法,而无需担心与其他已存在的方法冲突。

    评论
    编辑
    预览

    报告相同问题?

    悬赏问题

    • ¥15 宝塔面板一键迁移使用不了
    • ¥15 求一个按键录像存储到内存卡的ESP32CAM代码
    • ¥15 如何单独修改下列canvas推箱子代码target参数?,插入图片代替其形状,就是哪个绿色的圆圈每关用插入的图片替代
    • ¥20 四叉树的创建和输出问题
    • ¥15 javaweb连接数据库,jsp文件加载不出来
    • ¥15 matlab关于高斯赛德尔迭代的应用编撰。(相关搜索:matlab代码|迭代法)
    • ¥15 损失匹配问题,求解答
    • ¥15 3500常用汉字书法体检测数据集下载
    • ¥15 odoo17在制造模块或采购模块良品与次品如何分流和在质检模块下如何开发
    • ¥15 Qt音乐播放器的音乐文件相对路径怎么写
    手机看
    程序员都在用的中文IT技术交流社区

    程序员都在用的中文IT技术交流社区

    专业的中文 IT 技术社区,与千万技术人共成长

    专业的中文 IT 技术社区,与千万技术人共成长

    关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

    关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

    客服 返回
    顶部