在這個沒有框架的 PHP 專案中,我有這個檔案夾結構:配接器、類和模型
從根目錄執行 php 檔案“index.php”,我在處理模型和配接器類時遇到問題
索引檔案
<?php
include('Class/Load.php');
$connection = MysqlClass::getConnectionMysql();
類負載
<?php
include(__DIR__ . DIRECTORY_SEPARATOR . 'MysqlClass.php');
include(__DIR__ . DIRECTORY_SEPARATOR . 'UtilsClass.php');
include(__DIR__ . DIRECTORY_SEPARATOR . 'EmailClass.php');
Mysql類檔案
<?php
include ('UtilsClass.php');
class MysqlClass
{
/**
* @return PDO
*/
public static function getConnectionMysql(): PDO
{
$dbhost = ReadEnvFileClass::getConfig('MYSQL_LOCAL_HOST');
$dbuser = ReadEnvFileClass::getConfig('MYSQL_LOCAL_USER');
$dbpass = ReadEnvFileClass::getConfig('MYSQL_LOCAL_PWD');
$dbname = ReadEnvFileClass::getConfig('MYSQL_LOCAL_DBNAME');
try {
$dsn = "mysql:host=$dbhost;dbname=$dbname";
$dbh = new PDO($dsn, $dbuser, $dbpass);
} catch (PDOException $e){
var_dump($dbhost,$dbuser,$dbpass);
echo $e->getMessage();
}
return $dbh;
}
}
問題是在第二個 MysqlClass 檔案中,我是否應該在此處將檔案包含到我需要的不同類中,或者我應該在 index.php 檔案中從 load.php 檔案中執行它,然后從那里加載我需要的所有類在專案的其余部分。
uj5u.com熱心網友回復:
使用自動加載器總是一個好主意,就像Composer提供的那樣。
首先,移動一個目錄下Adapter的Class和Models子目錄src。完全洗掉Load.php。
結構將是:
index.php
composer.json
src/Class/MysqlClass.php
src/Class/UtilsClass.php
src/Class/EmailClass.php
src/Adapter/...
src/Models/...
然后composer.json在主目錄中創建檔案:
{
"autoload": {
"psr-4": {"Acme\\": "src/"}
}
}
在所有類檔案中,放置正確的命名空間并洗掉所有include和require呼叫:
<?php
namespace Acme/Class
class MysqlClass {
// ...
運行composer install或僅composer dump-autoload在主目錄中運行,并將autoload.php檔案包含在您的index.php(洗掉所有其他包含和要求)中。
<?php
require __DIR__ . '/vendor/autoload.php';
現在您可以從任何地方呼叫此代碼,如果需要,將加載該類:
use Acme/Class/MysqlClass
// ...
$connection = MysqlClass::getConnectionMysql();
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/465661.html
標籤:php php-7 php-7.2 php-7.4 php-7.3
上一篇:為什么PHP函式回傳TRUE?
