Php 如何通过它加载类';存储在变量中的名称

Php 如何通过它加载类';存储在变量中的名称,php,Php,我在一个文件中有一些类,每个类与类本身同名。我希望从给定名称动态加载相关文件并返回class对象,但我只有存储在变量中的文件/类名。怎么可能呢 public function loadClass($name) { include dirname(__FILE__) . '/classes/' . $name . '.php'; return $name; } 试试这个,你可以用 你可以称你的班级为 $obj = new MyClass1(); 试试这个,你可以用 你可以称你

我在一个文件中有一些类,每个类与类本身同名。我希望从给定名称动态加载相关文件并返回class对象,但我只有存储在变量中的文件/类名。怎么可能呢

public function loadClass($name) {
    include dirname(__FILE__) . '/classes/' . $name . '.php';
    return $name;
}
试试这个,你可以用

你可以称你的班级为

$obj  = new MyClass1();
试试这个,你可以用

你可以称你的班级为

$obj  = new MyClass1();

你应该这样做:

//test.php
class test {
    public function shout() {
        echo "Hello world!";
    }
}

//main file
function loadClass($name) {
    include(dirname(__FILE__) . '/classes/' . $name . '.php');
    return new $name();
}

$class = loadClass('test');
$class->shout(); //prints Hello World!
对于静态方法,请执行以下操作:

//test.php
class test {
    static function shout() {
        echo "Hello world!";
    }
}

//main file
function loadClass($name) {
    include(dirname(__FILE__) . '/classes/' . $name . '.php');
    $name;
}

$class = loadClass('test');
$class::shout(); //prints Hello World!

你应该这样做:

//test.php
class test {
    public function shout() {
        echo "Hello world!";
    }
}

//main file
function loadClass($name) {
    include(dirname(__FILE__) . '/classes/' . $name . '.php');
    return new $name();
}

$class = loadClass('test');
$class->shout(); //prints Hello World!
对于静态方法,请执行以下操作:

//test.php
class test {
    static function shout() {
        echo "Hello world!";
    }
}

//main file
function loadClass($name) {
    include(dirname(__FILE__) . '/classes/' . $name . '.php');
    $name;
}

$class = loadClass('test');
$class::shout(); //prints Hello World!
解决方案 如果
/classes1/Foo.php
存在。。。
  • $path
    将是第一个函数中的
    /classes1/Foo.php
  • 将调用require$path
  • 如果
    /classes2/Foo.php
    存在。。。
  • $path
    将是第一个函数中的
    /classes1/Foo.php
  • require$path
    将被跳过
  • $path
    将是第一个函数中的
    /classes2/Foo.php
  • 将调用require$path
  • 解决方案 如果
    /classes1/Foo.php
    存在。。。
  • $path
    将是第一个函数中的
    /classes1/Foo.php
  • 将调用require$path
  • 如果
    /classes2/Foo.php
    存在。。。
  • $path
    将是第一个函数中的
    /classes1/Foo.php
  • require$path
    将被跳过
  • $path
    将是第一个函数中的
    /classes2/Foo.php
  • 将调用require$path

  • 您可以使用
    $name
    变量实例化类的新实例:

    public function loadClass($name)
    {
        include dirname(__FILE__) . '/classes/' . $name . '.php';
        return new $name();
    }
    

    您可以使用
    $name
    变量实例化类的新实例:

    public function loadClass($name)
    {
        include dirname(__FILE__) . '/classes/' . $name . '.php';
        return new $name();
    }
    

    @TimCooper的可能副本在静态类上起作用,而我不打算实例化它们?在PHP中无法返回类。你唯一的选择是返回一个类名字符串,或者返回一个对象(或者是类本身的一个实例,或者是@TimCooper的一个实例)可能重复的@TimCooper。这对静态类有效吗?我不打算实例化它们。在PHP中,你无法返回一个类。你唯一的选择是返回一个类名字符串,或者返回一个对象(或者是类本身的实例,或者是的实例),你能给我解释一下吗?你能给我解释一下吗?我有一个
    开关($name)
    ,它将根据请求的
    $name
    加载一个文件和一个类,我应该把这个
    \uuu autoload()
    放在哪里?我有一个
    开关($name)
    ,它将根据请求的
    $name
    加载一个文件和一个类,我应该把这个
    \uu autoload()
    放在哪里?这对通常不需要任何实例化的静态类有效吗?如果它是“静态的”类您可以只调用类中的静态方法
    $name::blablablamMethod()
    这对通常不需要任何实例化的静态类有效吗?如果是“静态”类,您可以只调用类中的静态方法
    $name::blamMethod()
    我的类,它们的方法是静态的。你能给我看一个静态类的例子吗?它与您的版本不同吗?我的类及其方法是静态的。你能给我看一个静态类的例子吗?它和你的版本不同吗?