繁体   English   中英

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

[英]What is the proper way of loading of classes using namespace. So that i don't have to include autoload in every file?

您好,我有一项任务要按其命名空间对 class 类执行。 我的要求是加载类而不包括 autoload.php 的 require 关键字。

<?php
namespace classes;
class test {
public function getPrint(){
    echo "Hello";
}
}

这是带有命名空间的 class。 这是 class 函数的代码。

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';

每个文件中都有这个?

通常的工作方式是使用每个请求都经过的一个引导文件。 这通常也需要将路由移动到 PHP 代码中; 即,而不是example.com/foo/bar.php只是简单地调用文件foo/bar.php ,你通常会使用漂亮的 URL ,比如example.com/foo/bar ,然后在你的 Z2FEC392304/fooC13 代码中找出什么foo/bar bar.php确切的意思以及它应该做什么(尽管这是非常可选的,由您决定)。

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

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ bootstrap.php

这会导致您的 web 服务器为文件实际上不存在的任何和所有请求调用bootstrap.php (即css/style.css foo/bar是一个实际文件,并且将调用但bootstrap.php代替)。

bootstrap.php中,您require所有必要的文件,例如自动加载程序,也许还有配置文件,然后运行 class、function 或您想要的文件:

<?php

require_once 'classes/autoload.php';

$request = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
require "$request.php";

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

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

<?php

require_once('classes/autoload.php');
require_once('file1.php');
require_once('file2.php');
...

然后你不需要自动加载,因为文件已经附加在它之后。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM