gpt4 book ai didi

php - 从 print_r 或对象中排除私有(private)属性(property)?

转载 作者:可可西里 更新时间:2023-11-01 12:55:49 25 4
gpt4 key购买 nike

基本上我使用的是 Code Igniter,并且 Code Igniter 基类很大,当我 print_r 我的一些对象时,它们内部嵌入了基类。这使得获取我真正想要的信息(其余属性)变得很痛苦。

所以,我想知道是否有一种方法可以隐藏或删除基类对象?

我试过了

clone $object;
unset($object->ci);
print_r($object);

当然 ci 属性是私有(private)的。

我用于转储的实际函数是:

/**
* Outputs the given variables with formatting and location. Huge props
* out to Phil Sturgeon for this one (http://philsturgeon.co.uk/blog/2010/09/power-dump-php-applications).
* To use, pass in any number of variables as arguments.
* Optional pass in "true" as final argument to kill script after dump
*
* @return void
*/
function dump() {
list($callee) = debug_backtrace();
$arguments = func_get_args();
$total_arguments = count($arguments);
if (end($arguments) === true)
$total_arguments--;

echo '<fieldset style="background: #fefefe !important; border:2px red solid; padding:5px">';
echo '<legend style="background:lightgrey; padding:5px;">' . $callee['file'] . ' @ line: ' . $callee['line'] . '</legend><pre>';

$i = 0;
foreach ($arguments as $argument) {
//if the last argument is true we don't want to display it.
if ($i == ($total_arguments) && $argument === true)
break;

echo '<br/><strong>Debug #' . (++$i) . ' of ' . $total_arguments . '</strong>: ';

if ((is_array($argument) || is_object($argument)) && count($argument)) {
print_r($argument);
} else {
var_dump($argument);
}
}

echo '</pre>' . PHP_EOL;
echo '</fieldset>' . PHP_EOL;

//if the very last argument is "true" then die
if (end($arguments) === true)
die('Killing Script');
}

最佳答案

这应该适用于只返回未知类的公共(public)变量:

// Get the class of the object
$class_of_object= get_class($object);

// Get only public attributes (Note: if called from within class will return also private and protected)
$clone = get_class_vars($class_of_object);

// Try it
dump($clone);

这很 hacky,但有效 - 从对象中删除私有(private)属性(这不会​​保留对象名称),当然另一个缺点是您需要对属性名称进行硬编码:

// First cast clone to array
$b = (array) clone($a);

// Then unset value (There will be null bytes around A and to use them you need to run it in double quotes
// Replace A for * to remove protected properties
unset($b["\0A\0_ci"]);

// Finally back to object
$b = (object) $b;

// Test it
dump($b);

关于php - 从 print_r 或对象中排除私有(private)属性(property)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13486042/

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