오브젝트의 모든 속성을 인쇄하는 방법
php 페이지에 알 수 없는 개체가 있습니다.
인쇄/에코를 통해 어떤 속성/값을 가지고 있는지 확인할 수 있는 방법은 무엇입니까?
기능은 어떨까요?물건에 어떤 기능이 있는지 알 수 있는 방법이 있나요?
<?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() <-- 인스턴스 이름
아직 아무도 Reflection API 접근 방식을 제공하지 않았기 때문에 이 방법은 그렇게 될 것 같습니다.
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));
이후 사용자::$property는 프라이빗이며 IS_PRIVATE로 필터링할 때 반환됩니다.
//Outputs
Array
(
[0] => ReflectionProperty Object
(
[name] => property
[class] => Person
)
)
문서를 읽어보세요!
var_dump($obj);
자세한 내용을 보려면 Reflection Class를 사용할 수 있습니다.
http://www.phpro.org/manual/language.oop5.reflection.html
자세한 내용을 보려면 다음 커스텀 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;
}
}
이제 사용자의 인스턴스를 만들고 기능을 사용하여 래핑합니다.
$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 ]
Pretty Dump을 사용해봐. 나한테는 아주 좋아.
오브젝트 속성 var_module(오브젝트)을 아는 것이 가장 좋은 방법입니다.클래스 이름을 몰라도 연관된 모든 공용, 개인 및 보호된 속성이 표시됩니다.
그러나 메서드의 경우 클래스 이름을 알아야 합니다.그렇지 않으면 오브젝트에 관련된 메서드를 모두 취득하는 것은 어렵다고 생각합니다.
<?php
echo "<textarea name='mydata'>\n";
echo htmlspecialchars($data)."\n";
echo "</textarea>";
?>
언급URL : https://stackoverflow.com/questions/3034530/how-to-print-all-properties-of-an-object
'programing' 카테고리의 다른 글
케이스를 올바르게 사용하는 방법..MySQL의 경우 (0) | 2022.09.19 |
---|---|
Java에서 클래스의 다른 인스턴스를 실행하는 스레드 간에 정적 변수를 동기화하려면 어떻게 해야 합니까? (0) | 2022.09.19 |
로짓이 뭐죠?softmax와 softmax_cross_entropy_with_logits의 차이점은 무엇입니까? (0) | 2022.09.19 |
toString()과 hashCode()가 오버라이드 되었을 때 자바에서 객체의 "객체 참조"를 얻으려면 어떻게 해야 합니까? (0) | 2022.09.19 |
기본 Vue 도움말: 구성 요소의 JS 개체 값 액세스 (0) | 2022.09.19 |