我在php页面中有一个未知对象。
如何打印/回显它,以便查看它具有哪些属性/值?
函数呢?有什么办法知道对象具有什么功能?
我在php页面中有一个未知对象。
如何打印/回显它,以便查看它具有哪些属性/值?
函数呢?有什么办法知道对象具有什么功能?
print_r($products,True)
来代替通过get_object_vars($product)
进行调试日志记录error_log(...,0)
。并且另外获得对象变量的键值,在我的情况下,这些对象值被组织为一个关联数组。我想知道为什么print_r($ product)返回1作为结果。非常感谢Brad Lowry!
error_log("print_r(\$product) = ".print_r($product),0);
,在我的情况下,在连接器脚本中引起了错误,虽然error_log("print_r(\$product,true) = ".print_r($product,true),0);
还可以。(并且还提供了所需的输出:-)
Answers:
<?php var_dump(obj) ?>
要么
<?php print_r(obj) ?>
这些也是您用于数组的相同内容。
这些将显示使用PHP 5的对象的受保护和私有属性。根据手册,不会显示静态类成员。
如果您想了解成员方法,可以使用get_class_methods():
$class_methods = get_class_methods('myclass');
// or
$class_methods = get_class_methods(new myclass());
foreach ($class_methods as $method_name)
{
echo "$method_name<br/>";
}
相关资料:
get_class() <-表示实例的名称
因为没有人没有提供过一种面向对象的方法,但是这里就像要做的那样。
class Person {
public $name = 'Alex Super Tramp';
public $age = 100;
private $property = 'property';
}
$r = new ReflectionClass(new Person);
print_r($r->getProperties());
//Outputs
Array
(
[0] => ReflectionProperty Object
(
[name] => name
[class] => Person
)
[1] => ReflectionProperty Object
(
[name] => age
[class] => Person
)
[2] => ReflectionProperty Object
(
[name] => property
[class] => Person
)
)
使用反射的好处是可以按属性的可见性进行过滤,如下所示:
print_r($r->getProperties(ReflectionProperty::IS_PRIVATE));
由于Person :: $ property是私有的,因此在通过IS_PRIVATE过滤时返回:
//Outputs
Array
(
[0] => ReflectionProperty Object
(
[name] => property
[class] => Person
)
)
阅读文档!
var_dump($obj);
如果您想了解更多信息,可以使用ReflectionClass:
尝试使用Pretty Dump对我来说很棒
要获取更多信息,请使用以下自定义TO($ someObject)函数:
我写了这个简单的函数,它不仅显示给定对象的方法,还显示其属性,封装和一些其他有用的信息,例如发行说明(如果给出)。
function TO($object){ //Test Object
if(!is_object($object)){
throw new Exception("This is not a Object");
return;
}
if(class_exists(get_class($object), true)) echo "<pre>CLASS NAME = ".get_class($object);
$reflection = new ReflectionClass(get_class($object));
echo "<br />";
echo $reflection->getDocComment();
echo "<br />";
$metody = $reflection->getMethods();
foreach($metody as $key => $value){
echo "<br />". $value;
}
echo "<br />";
$vars = $reflection->getProperties();
foreach($vars as $key => $value){
echo "<br />". $value;
}
echo "</pre>";
}
为了向您展示它的工作原理,我现在将创建一些随机的示例类。让我们创建一个名为Person的类,并在类声明的上方放置一些发行说明:
/**
* DocNotes - This is description of this class if given else it will display false
*/
class Person{
private $name;
private $dob;
private $height;
private $weight;
private static $num;
function __construct($dbo, $height, $weight, $name) {
$this->dob = $dbo;
$this->height = (integer)$height;
$this->weight = (integer)$weight;
$this->name = $name;
self::$num++;
}
public function eat($var="", $sar=""){
echo $var;
}
public function potrzeba($var =""){
return $var;
}
}
现在,让我们创建一个Person的实例,并用我们的函数包装它。
$Wictor = new Person("27.04.1987", 170, 70, "Wictor");
TO($Wictor);
这将输出有关类名称,参数和方法的信息,包括封装信息和参数数量,每个方法的参数名称,方法位置以及它所在的代码行。请参见下面的输出:
CLASS NAME = Person
/**
* DocNotes - This is description of this class if given else it will display false
*/
Method [ public method __construct ] {
@@ C:\xampp\htdocs\www\kurs_php_zaawansowany\index.php 75 - 82
- Parameters [4] {
Parameter #0 [ $dbo ]
Parameter #1 [ $height ]
Parameter #2 [ $weight ]
Parameter #3 [ $name ]
}
}
Method [ public method eat ] {
@@ C:\xampp\htdocs\www\kurs_php_zaawansowany\index.php 83 - 85
- Parameters [2] {
Parameter #0 [ $var = '' ]
Parameter #1 [ $sar = '' ]
}
}
Method [ public method potrzeba ] {
@@ C:\xampp\htdocs\www\kurs_php_zaawansowany\index.php 86 - 88
- Parameters [1] {
Parameter #0 [ $var = '' ]
}
}
Property [ private $name ]
Property [ private $dob ]
Property [ private $height ]
Property [ private $weight ]
Property [ private static $num ]
print_r()
和var_dump()
。var_dump()
可以采用多个$expression
参数(不算大)。但是,print_r()
有一个可选参数$return
,默认为FALSE,但可以设置为TRUE,这会使函数“返回”输出,而不仅仅是表达它。如果您要收集print_r()
结果,然后在输出底部的开发人员“块”中表示结果,这将非常有用。