亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

包括類中的相對路徑變化(奇怪的行為)

包括類中的相對路徑變化(奇怪的行為)

PHP
烙印99 2021-12-03 11:03:41
我不想使用自動加載!我有一個get_class包含與當前類相關的文件的方法的類我在類中多次調用該方法(始終是類的相同實例),但有時當前類的相對路徑不起作用/更改?看起來很奇怪..如果我把工作目錄(CWD)的相對路徑像'php/map/app/'.$type.'/'.$name.'.php'它一樣總是有效什么可能導致這種情況?該方法是從類的同一個實例和同一個 PHP 進程/請求調用的,所以看起來很奇怪,相對路徑有時才有效(它會改變)腳本總是從同一個來源執行 /some-dir/inde.phpprivate function get_class(string $type, string $name): string{    $name = ucfirst($name);    $file = 'map/app/'.$type.'/'.$name.'.php';    if(!include_once $file){        throw new Error('File missing: '.$file);    }    return '\\dbdata\\'.$type.'\\'.$name;}
查看完整描述

3 回答

?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

考慮到相對路徑,它似乎is_file()并且include_once()不是以相同的方式“工作”。

一切都按預期工作。我正在測試is_file()


查看完整回答
反對 回復 2021-12-03
?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

如果您從與包含文件所在的文件夾不同的文件夾中執行此腳本,它將失敗。


根據根路徑查找文件(在開頭添加 /)或使用某種自動加載器。


這可以由 Composer 輕松管理,您的 composer.json 文件將如下所示:


"autoload": {

    "psr-4": {

        "dbdata\\": "map/app/"

    },

    "classmap": [

        "any/additional/classes/to/map"

    ]

}

您需要確保您的 php 文件是命名空間的。然后您還必須vendor/autoload.php在訪問任何映射類之前包括


查看完整回答
反對 回復 2021-12-03
?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

您需要閱讀:1)Php 命名空間 2)Php 自動加載類 3)使用命名空間導入類


簡單示例(類文件夾/classes/autoload.php):


spl_autoload_register(function($class) {

    // convert namespace to full file path

    $class = 'classes/' . str_replace('\\', '/', $class) . '.php';

    // Load class if exists

    if (file_exists($class)) {

        if (!class_exists($class)) {

            require_once($class);   

        }

    }

});

類示例(classes/Auth/Login/Auth.php):


<?php

// Create namespace

namespace Auth\Login;


// import other class if needed

use Auth\Login\Mysql;


// class sample with or without extends

class Auth extends Mysql

{

     ... class methods here ...

}

?>

然后從命名空間(router.php)加載類:


<?php

require_once($_SERVER['DOCUMENT_ROOT'].'/classes/autoload.php');

// Load class 

use Auth\Login\Auth;

try{

    $r = new Auth();

}catch(Exception $e){

    echo '<h4 style="color: #222; font-size: 15px; font-family: Arial">'.$e->getMessage().'<h4>';

}

?>

或者只是從完整路徑加載:


require_once($_SERVER['DOCUMENT_ROOT'].'/path-to-class/ClassName.php'); 


查看完整回答
反對 回復 2021-12-03
  • 3 回答
  • 0 關注
  • 186 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號