gpt4 book ai didi

php - 如何检查函数是否已存在于 SPL 堆栈中?

转载 作者:可可西里 更新时间:2023-10-31 23:24:11 26 4
gpt4 key购买 nike

我正在尝试使用 spl_autoload_register 并且我想创建一个 if() 语句来检查类方法是否已经注册。

例如:

if (spl_autoload_function(array($this, '_loadClass'))
// Then do nothing
else
// Then run spl_autoload_register(array($this, '_loadClass));

类似上面的代码/方法是否可行?

最佳答案

I am trying to do an autoloader and I want to create an if statement that will check if the class method as already been registered.

你不应该。不需要做 if 语句; spl_autoload_register 将忽略具有相同参数的第二次调用:

<?php

$foo = function( $class ) {
return false;
};

spl_autoload_register( $foo );
var_dump( spl_autoload_functions( ) );

spl_autoload_register( $foo );
var_dump( spl_autoload_functions( ) );

输出显示,虽然我们调用了 spl_autoload_register 两次,但仍然只有 一个 自动加载器;

array(1) {
[0]=>
object(Closure)#1 (1) {
["parameter"]=>
array(1) {
["$class"]=>
string(10) "<required>"
}
}
}
array(1) {
[0]=>
object(Closure)#1 (1) {
["parameter"]=>
array(1) {
["$class"]=>
string(10) "<required>"
}
}
}

如果你想确保一个类不会自己注册两次,你当然可以在某种静态成员中设置它;

<?php
class Foo {
protected static $registered = false;

public function register( ) {
if( self::$registered !== false ) {
return;
}
echo "spl_autoload_register( \$this, '_loadClass' );\n";
self::$registered = true;
}
}

$foo = new Foo( );
$foo->register( );

$bar = new Foo( );
$bar->register( );

输出显然是一行:

spl_autoload_register( $this, '_loadClass' );

也就是说,您为什么要编写自己的自动加载器?已经有很多,很难相信没有一个符合您的要求。

关于php - 如何检查函数是否已存在于 SPL 堆栈中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9461113/

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