将在自动加载的命名空间 class 文件中声明的函数创建为全局函数
Make a function that is declared in an autoloaded, namespaced class file, into a global function
我的要求可能看起来很糟糕,但none我越想知道它是否可行。
我正在使用 composer 自动加载我的 classes。在其中一个 class 文件中,我想定义一个可以在全局命名空间中用作 shorthand 的函数。由于作曲家的要求, class 需要命名空间。
我的问题:有没有什么方法可以通过一些小的改动使它正常工作?
MyClass.php:
<?php
namespace Jodes;
class MyClass {
public function __construct() {
echo "I am the class";
}
}
function fn(){
echo "I am a shorthand for doing stuff";
}
index.php:
<?php
require_once '../vendor/autoload.php';
use Jodes\MyClass;
new MyClass();
// Jodes\fn(); // works
// fn(); // doesn't work
composer.json
{
"name": "jodes/mypackage",
"autoload": {
"psr-4" : {
"Jodes\" : "src"
}
}
}
尽管阅读的链接多得我数不过来,但我已经尝试了所有我能想到的方法,但都失败了。
谢谢
首先,如果这个函数不是MyClass的一部分,就不应该放在同一个文件中。惯例是将每个 class(并且只有那个 class)放在单独的文件中。
对于像 fn() 这样应该在全球范围内可用的辅助函数,您需要一个单独的文件。在全局命名空间中声明该函数,然后使用 Composer 的 files 机制将其添加到您的 Composer 项目中:
//common.php
<?php
function fn() {
// some code
}
//composer.json
"autoload": {
"files": ["path/to/common.php"]
}
这将为每个请求加载您的 common.php 文件并使您的辅助函数可用。
我的要求可能看起来很糟糕,但none我越想知道它是否可行。
我正在使用 composer 自动加载我的 classes。在其中一个 class 文件中,我想定义一个可以在全局命名空间中用作 shorthand 的函数。由于作曲家的要求, class 需要命名空间。
我的问题:有没有什么方法可以通过一些小的改动使它正常工作?
MyClass.php:
<?php
namespace Jodes;
class MyClass {
public function __construct() {
echo "I am the class";
}
}
function fn(){
echo "I am a shorthand for doing stuff";
}
index.php:
<?php
require_once '../vendor/autoload.php';
use Jodes\MyClass;
new MyClass();
// Jodes\fn(); // works
// fn(); // doesn't work
composer.json
{
"name": "jodes/mypackage",
"autoload": {
"psr-4" : {
"Jodes\" : "src"
}
}
}
尽管阅读的链接多得我数不过来,但我已经尝试了所有我能想到的方法,但都失败了。
谢谢
首先,如果这个函数不是MyClass的一部分,就不应该放在同一个文件中。惯例是将每个 class(并且只有那个 class)放在单独的文件中。
对于像 fn() 这样应该在全球范围内可用的辅助函数,您需要一个单独的文件。在全局命名空间中声明该函数,然后使用 Composer 的 files 机制将其添加到您的 Composer 项目中:
//common.php
<?php
function fn() {
// some code
}
//composer.json
"autoload": {
"files": ["path/to/common.php"]
}
这将为每个请求加载您的 common.php 文件并使您的辅助函数可用。