为了账号安全,请及时绑定邮箱和手机立即绑定

使用命名空间加载类的正确方法是什么?这样我就不必在每个文件中包含自动加载?

使用命名空间加载类的正确方法是什么?这样我就不必在每个文件中包含自动加载?

PHP
白板的微信 2023-07-07 10:48:45
您好,我有一项任务要做,即按名称空间对类进行分类。我的要求是加载类而不包含 autoload.php 的 require 关键字。<?phpnamespace classes;class test {public function getPrint(){    echo "Hello";}}这是带有命名空间的类。这是类函数的代码。require_once 'classes/autoload.php';use classes\test2;$dt = new test();$dt2 = new test2();$dt->getPrint();echo $dt2->Okay();我正在自动加载课程。我的问题是使用以下方式加载类require_once 'classes/autoload.php';这条线。我必须在每个代码文件中使用这一行来加载类。加载类的正确方法是什么。所以我不必包括require_once 'classes/autoload.php';每个文件中都有这个吗?
查看完整描述

2 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

通常的工作方式是使用每个请求都会经过的一个引导文件。这通常还需要将路由移至 PHP 代码中;即,您通常不会example.com/foo/bar.php简单地调用 file foo/bar.php,而是使用漂亮的 URL(例如 )example.com/foo/bar,然后在 PHP 代码中找出foo/bar确切的含义以及它应该执行的操作(尽管这是相当可选的,由您决定)。


首先,您设置一个.htacess这样的文件,或者在您的 Web 服务器配置文件中添加等效的配置:


RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^ bootstrap.php

这会导致您的 Web 服务器调用bootstrap.php其文件实际上不存在的任何和所有请求(即css/style.css仍按原样提供服务,但foo/bar不是实际文件,而是会调用bootstrap.php)。


然后,bootstrap.php您需要require所有必要的文件,例如自动加载器,也许还有配置文件,然后运行您想要的任何类、函数或文件:


<?php


require_once 'classes/autoload.php';


$request = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);

require "$request.php";

上面是获取请求的 URI(例如/foo/bar)并将其用于requirePHP 文件的简单示例。这是非常幼稚的并且有潜在危险,因此您需要在实际使用中进行一些更多的自定义处理。


查看完整回答
反对 回复 2023-07-07
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

您可以创建一个需要您要使用的所有其他文件的文件,包括自动加载:


<?php


require_once('classes/autoload.php');

require_once('file1.php');

require_once('file2.php');

...

然后您就不需要要求自动加载,因为文件已经附加在它后面。


查看完整回答
反对 回复 2023-07-07
  • 2 回答
  • 0 关注
  • 98 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信