php---매직 방법( tostring(),set_state())
class Test{
public $a;
public function func(){
echo ' ';
}
}
$test = new Test();
echo $test;
출력: Catchable fatal error: Object of class Test could not be converted to string in G:\xampp\htdocs\ww\testclass.php on line 10
만약 우리가 대상을 인쇄하려면 을 호출해야 한다toString()이라는 마술 방법을 추가했습니다.toString () 은 틀리지 않을 것입니다.
class Test{
public $a;
public function func(){
echo ' ';
}
public function __toString(){
return " ";
}
}
$test = new Test();
echo $test;
출력:
대상을 인쇄하는 방법
__set_state()
이 방법도 사실 비교적 간단하다. 바로varexport()의 콜백 함수입니다.다음 코드를 보세요.
class Test{
public $a;
public function func(){
echo ' ';
}
}
$test = new Test();
var_export($test);
출력:
Test::__set_state(array( 'a' => NULL, ))
주의 a는 NULL입니다. 값이 없습니다. 다음은 제가 메모를 쓰겠습니다
class Test{
public $a;
static function __set_state($array) {// ,
$tmp = new Test();
$tmp->a = 'abc';//
return $tmp;// ,
}
}
$test = new Test();
eval('$b = '.var_export($test,true).';');
var_dump($b);
출력의 내용은 다음과 같습니다.
object(Test)#2 (1) { ["a"]=> string(3) "abc"}
이게 무슨 소용이냐고요?그다지 쓸모가 없는데, 가장 큰 작용은 대상을 복제할 수 있다.코드만 바꾸면 돼.
class Test{
public $a;
static function __set_state($array) {// ,
$tmp = new Test();
$tmp->a = $array['a'];//
return $tmp;// ,
}
}
$test = new Test();
$test->a = ' $test';
eval('$b = '.var_export($test,true).';');
var_dump($b);
출력:
object(Test)#2 (1) {[a]=> string(11) "나는 $test"}
누가 또 물어볼 거예요. 클론은 직접 클론() 방법으로 할 수 있어요!!좋습니다. 이런 상황을 어떻게 복제하는지 여쭙겠습니다. 코드를 살펴보겠습니다.
class Test{
public $a;
static function __set_state($array) {// ,
$tmp = new Test();
$tmp->a = str_replace('$test','$b',$array['a']);//
return $tmp;// ,
}
}
$test = new Test();
$test->a = ' $test';
eval('$b = '.var_export($test,true).';');
var_dump($b);
그러면 우리는 $test를 복제했지만 그에 상응하는 변화를 했다.
어떤 사람들은 네가 왜 을 쓰지 않느냐고 묻는다클론이 리셋을 할까요?이것이 바로 내가 말하고 싶은 부분이다. 개인적으로clone()에 없음set_ 때문에 state ()가 강력합니다.clone () 는 받아들일 수 있는 매개 변수가 없어서 '진화' 의 범위를 제한합니다. 예를 들어 설명하겠습니다.
class Test{
public $a;
function __clone(){
$this->a = str_replace('a',' a',$this->a);// a
}
}
$test = new Test();
$test->a = ' a';
$b = clone $test;
var_dump($b);
결과 출력:
object(Test)#2 (1) {[a]=> string(13) "나는 클론 a"}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.