- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
ini_set('unserialize_callback_func', 'spl_autoload_call');
spl_autoload_register(array(self::getInstance(), 'autoload'));
spl_autoload_call
?
$serialized_object='O:1:"a":1:{s:5:"value";s:3:"100";}';
ini_set('unserialize_callback_func','mycallback');
function mycallback($classname) {
echo 1;
}
function func2()
{
echo 2;
}
spl_autoload_register('func2');
unserialize($serialized_object);
212
最佳答案
我做了一些测试,这是我做的笔记(希望这是可以理解的^^ ;;而且我并没有因为自己的想法而迷失^^)
注意:我已经在PHP 5.3.2-dev上进行了测试,以防万一。
首先,让我们定义一个temp-2.php
文件,该文件仅包含以下内容:
<?php
class a {
}
temp.php
的文件中-该文件必须包含
temp-2.php
,以便知道该类的定义。
a
类:
$serialized_object='O:1:"a":1:{s:5:"value";s:3:"100";}';
function callback_spl($className) {
var_dump(__FUNCTION__ . ' : ' . $className);
}
spl_autoload_register('callback_spl');
$data = unserialize($serialized_object);
var_dump($data);
string 'callback_spl : a' (length=16)
object(__PHP_Incomplete_Class)[1]
public '__PHP_Incomplete_Class_Name' => string 'a' (length=1)
public 'value' => string '100' (length=3)
callback_spl
已被调用spl_autoload_register
注册__PHP_Incomplete_Class
的实例spl_autoload_register
注册一个自动加载功能,该功能实际上是自动加载该类的定义:
$serialized_object='O:1:"a":1:{s:5:"value";s:3:"100";}';
function callback_spl($className) {
var_dump(__FUNCTION__ . ' : ' . $className);
require dirname(__FILE__) . '/temp-2.php';
}
spl_autoload_register('callback_spl');
$data = unserialize($serialized_object);
var_dump($data);
string 'callback_spl : a' (length=16)
object(a)[1]
public 'value' => string '100' (length=3)
spl_autoload_register
注册的自动加载功能__PHP_Incomplete_Class
的实例a
的一个实例unserialize_callback_func
时不需要spl_autoload_register
。
unserialize_callback_func
而不使用
spl_autoload_register
怎么办?
$serialized_object='O:1:"a":1:{s:5:"value";s:3:"100";}';
ini_set('unserialize_callback_func', 'callback_no_spl');
function callback_no_spl($className) {
var_dump(__FUNCTION__ . ' : ' . $className);
require dirname(__FILE__) . '/temp-2.php';
}
$data = unserialize($serialized_object);
var_dump($data);
string 'callback_no_spl : a' (length=19)
object(a)[1]
public 'value' => string '100' (length=3)
callback_no_spl
注册的unserialize_callback_func
回调函数称为a
的实例callback_no_spl
设置一个称为unserialize_callback_func
的自动加载功能callback_spl
设置另一个自动加载功能spl_autoload_register
,$serialized_object='O:1:"a":1:{s:5:"value";s:3:"100";}';
ini_set('unserialize_callback_func', 'callback_no_spl');
function callback_no_spl($className) {
var_dump(__FUNCTION__ . ' : ' . $className);
require dirname(__FILE__) . '/temp-2.php';
}
spl_autoload_register('callback_spl');
function callback_spl($className) {
var_dump(__FUNCTION__ . ' : ' . $className);
require dirname(__FILE__) . '/temp-2.php';
}
$data = unserialize($serialized_object);
var_dump($data);
string 'callback_spl : a' (length=16)
object(a)[1]
public 'value' => string '100' (length=3)
spl_autoload_register
的自动加载功能才被称为$serialized_object='O:1:"a":1:{s:5:"value";s:3:"100";}';
spl_autoload_register('callback_spl');
function callback_spl($className) {
var_dump(__FUNCTION__ . ' : ' . $className);
require dirname(__FILE__) . '/temp-2.php';
}
ini_set('unserialize_callback_func', 'callback_no_spl');
function callback_no_spl($className) {
var_dump(__FUNCTION__ . ' : ' . $className);
require dirname(__FILE__) . '/temp-2.php';
}
$data = unserialize($serialized_object);
var_dump($data);
string 'callback_spl : a' (length=16)
object(a)[1]
public 'value' => string '100' (length=3)
spl_autoload_register
定义的自动加载程序比使用
unserialize_callback_func
定义的自动加载程序具有更高的优先级。
spl_autoload_register
注册了一个(即优先级最高的功能)实际上并没有加载该类的定义:
$serialized_object='O:1:"a":1:{s:5:"value";s:3:"100";}';
ini_set('unserialize_callback_func', 'callback_no_spl');
function callback_no_spl($className) {
var_dump(__FUNCTION__ . ' : ' . $className);
require dirname(__FILE__) . '/temp-2.php';
}
spl_autoload_register('callback_spl');
function callback_spl($className) {
var_dump(__FUNCTION__ . ' : ' . $className);
//require dirname(__FILE__) . '/temp-2.php'; // We don't load the class' definition
}
$data = unserialize($serialized_object);
var_dump($data);
string 'callback_spl : a' (length=16)
string 'callback_no_spl : a' (length=19)
object(a)[1]
public 'value' => string '100' (length=3)
spl_autoload_register
注册的自动加载功能unserialize_callback_func
中注册的自动加载功能$serialized_object='O:1:"a":1:{s:5:"value";s:3:"100";}';
ini_set('unserialize_callback_func', 'callback_no_spl');
function callback_no_spl($className) {
var_dump(__FUNCTION__ . ' : ' . $className);
//require dirname(__FILE__) . '/temp-2.php'; // We don't load the class' definition
}
spl_autoload_register('callback_spl');
function callback_spl($className) {
var_dump(__FUNCTION__ . ' : ' . $className);
//require dirname(__FILE__) . '/temp-2.php'; // We don't load the class' definition
}
$data = unserialize($serialized_object);
var_dump($data);
string 'callback_spl : a' (length=16)
string 'callback_no_spl : a' (length=19)
string 'callback_spl : a' (length=16)
( ! ) Warning: unserialize() [function.unserialize]: Function callback_no_spl() hasn't defined the class it was called for ...
object(__PHP_Incomplete_Class)[1]
public '__PHP_Incomplete_Class_Name' => string 'a' (length=1)
public 'value' => string '100' (length=3)
spl_autoload_register
注册的函数unserialize_callback_func
注册的函数spl_autoload_register
注册的函数!unserialize_callback_func
注册的函数未加载类的定义callback_spl
之后才发生! unserialize_callback_func
定义的函数未加载应具有的功能,也会发生某种自动加载操作... unserialize_callback_func
自PHP 4.2以来就存在spl_autoload_register
仅从PHP 5.1开始存在__autoload
已在PHP 5中引入spl_autoload_register
的“堆栈/队列”行为可能会对
unserialize_callback_func
的旧行为产生一些干扰...
关于php - 当已经使用了spl_autoload_register时,为什么需要unserialize_callback_func?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2325884/
我正在尝试利用 PHP 中的自动加载。我在不同的目录中有各种类,所以我引导自动加载如下: function autoload_services($class_name) { $file = '
我发现了几个与我类似的 SO 问题,但我正在努力寻找对我有帮助的答案,而且我真的很想知道自动加载命名空间中存在的类的最佳实践。 我的文件夹结构: root -- classes --- Users -
为什么会返回 fatal error :Class 'Mynamespace\String' not found in ...: set_include_path(get_include_path()
我有一个文件可以自动加载我的每个类。 这是它包含的内容: spl_autoload_register(function($class){ require_once 'classes/' . $
我正在尝试使用 spl_autoload_register 将实例化对象用作自动加载器。是否可以?我在几个地方看到人们使用类静态函数作为自动加载器,而不是对象。 例子: class loadFile{
我想关于 spl_autoload_register() 优于 autoload() 的优点,我想我缺少了一些东西。据我了解,spl_autoload_register() 的优点是它可以注册多次,然
我使用composer管理我的依赖项和类加载。该工具使用spl_autoload_register函数。 我想使用 PHP 扩展来提供一些与通过 Composer 定义的其他类相同的定义(名称、命名空
这段代码: 抛出这个错误: Fatal error: Uncaught exception 'LogicException' with message 'Function 'autoloader'
我让 spl_autoload_register 工作正常,但后来我决定添加一些命名空间以引入 PSR2 合规性,但似乎无法让它工作。 目录结构: -index.php -classes/ -Cl
我想在我正在开发的 wordpress 插件中通过 spl_autoload_register 使用类的动态加载,但问题是它不能干扰此功能的预先存在的实现。在我最初的尝试中: // register
我正在使用 spl_autoload_register为了加载类。 我有一个 index.php 文件,其中包含一个 init.php 文件。 spl_autoload_register函数在init
我在主目录中创建了 5 个文件夹,其中包含 5 个类(Ad_Class、Blocked_Class、Friend_Class、Image_Class、Profile_Class)。我还在提到的文件夹中
拥有多个spl_autoload_register的好处是什么 例子: spl_autoload_register('autoload_systems'); spl_autoload_register
class Manage { spl_autoload_register(function($class) { include $class . '.class.php'; }); } 假设我
这个问题在这里已经有了答案: 10年前关闭。 Possible Duplicate: unexpected T_FUNCTION with php 5.2.17 but fine on localho
use PHPMailer\PHPMailer\PHPMailer; require_once "PHPMailer/PHPMailer.php"; $mail = new PHPMailer(t
我的目录结构如下 > Root > -Admin // admin area > --index.php // admin landing page, it includes ../config.ph
我正在开发自定义框架。当我尝试动态化我的类(class)调用时遇到了一个问题。 这是我的文件的视觉效果: 所以我决定为每个文件夹(库、 Controller 和模型)创建一个不同的函数: functi
我一直在阅读关于 spl_autoload_register 函数作为 require、require_once、include 和 & 包含一次。尽管有很多关于如何实现这一点的讨论,但文档并不太详细
所以我之前已经在这里问过这个问题,但是提供的解决方案对我不起作用。这是我的设置: /mylib /Vendor/Module/MyClass.php /document_root in
我是一名优秀的程序员,十分优秀!