gpt4 book ai didi

php - 如何在变量类上调用静态方法?

转载 作者:IT王子 更新时间:2023-10-29 00:58:51 26 4
gpt4 key购买 nike

我正在尝试制作某种函数,从给定变量加载和实例化类。像这样:

<?php
function loadClass($class) {
$sClassPath = SYSPATH."/classes/{$class}.php";
if (file_exists($sClassPath)) {
require_once($sClassPath);
$class = $class::getInstance();
}
}
?>

如果我这样使用它:

<?php
loadClass('session');
?>

它应该包含并实例化 session 类。

顺便说一句:静态 getInstance 函数来自这段代码:

<?php
function getCallingClass() {
$backtrace = debug_backtrace();
$method = $backtrace[1]['function'];
$file = file($backtrace[1]['file']);
$line = $file[($backtrace[1]['line'] - 1)];
$class = trim(preg_replace("/^.+?([A-Za-z0-9_]*)::{$method}\(.*$/s", "\\1\\2", $line));

if(! class_exists($class)) {
return false;
} return $class;
}

class Core {

protected static $instances = array();

public static function getInstance() {
$class = getCallingClass();

if (!isset(self::$instances[$class])) {
self::$instances[$class] = new $class();
} return self::$instances[$class];
}

}

?>

问题是现在在类中使用函数的方式是这样的:

<?php
$session = session::getInstance();
?>

但现在我想将它构建到一个函数中,这样我就再也不必使用那行代码了。我只是说 loadClass('session');而且我可以使用 $session->blablablafunction();

最佳答案

在变量类名上调用静态函数显然在 PHP 5.3 中可用:

Foo::aStaticMethod();
$classname = 'Foo';
$classname::aStaticMethod(); // As of PHP 5.3.0

http://php.net/manual/en/language.oop5.static.php

我自己现在肯定可以使用它。

在此之前,您不能真正假设要加载的每个类都设计为单例。只要您使用的是< 5.3,您只需加载类并通过构造函数进行实例化:

function loadClass($class) {
$sClassPath = SYSPATH."/classes/{$class}.php";
if (file_exists($sClassPath)) {
require_once($sClassPath);
$class = new $class;
}

}

只需加载类而不从中创建对象。然后在 loadClass() 函数之外对那些意味着是单例的调用“::getInstance()”,对那些不是单例的调用“new”。

尽管正如其他人之前指出的那样,__autoload() 可能对您很有效。

关于php - 如何在变量类上调用静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/642391/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com