반응형
PHP5의 개체는 개체에서 다른 방법을 모니터링하는 데 사용되는 __call() 전용 방법을 추가합니다.개체에 없거나 권한 제어에 있는 메서드를 호출하려고 하면 _call 메서드가 자동으로 호출됩니다.
예7:_call
<?php
class foo {
function __call($name,$arguments) {
print("Did you call me? I'm $name!");
}
} $x = new foo();
$x->doStuff();
$x->fancy_stuff();
?>
이 특별한 방법은 JAVA에서 "overloading" 동작을 수행하는데 사용할 수 있습니다. 따라서 파라미터를 확인하고 개인 메서드를 호출하여 파라미터를 전달할 수 있습니다.
예 8: _call을 사용하여 "과부하" 동작을 수행합니다
<?php
class Magic {
function __call($name,$arguments) {
if($name=='foo') {
if(is_int($arguments[0])) $this->foo_for_int($arguments[0]);
if(is_string($arguments[0])) $this->foo_for_string($arguments[0]);
}
} private function foo_for_int($x) {
print("oh an int!");
} private function foo_for_string($x) {
print("oh a string!");
}
} $x = new Magic();
$x->foo(3);
$x->foo("3");
?>
인용:
_call과 ____callStatic은 php 클래스의 기본 함수입니다.
__call( ) 은( 는) 객체의 컨텍스트에서 호출된 메서드에 접근할 수 없으면 트리거합니다
__callStatic( ) 은( 는) 정적 컨텍스트에서 호출된 메서드에 액세스할 수 없는 경우,그것은 트리거될 것이다.
예:
<?php
abstract class Obj
{
protected $property = array();
abstract protected function show();
public function __call($name,$value)
{
if(preg_match("/^set([a-z][a-z0-9]+)$/i",$name,$array))
{
$this->property[$array[1]] = $value[0];
return;
}
elseif(preg_match("/^get([a-z][a-z0-9]+)$/i",$name,$array))
{
return $this->property[$array[1]];
}
else
{
exit("<br>;Bad function name '$name' ");
}
}
}
class User extends Obj
{
public function show()
{
print ("Username: ".$this->property['Username']."<br>;");
//print ("Username: ".$this->getUsername()."<br>;");
print ("Sex: ".$this->property['Sex']."<br>;");
print ("Age: ".$this->property['Age']."<br>;");
}
}
class Car extends Obj
{
public function show()
{
print ("Model: ".$this->property['Model']."<br>;");
print ("Sum: ".$this->property['Number'] * $this ->property['Price']."<br>;");
}
}
$user = new User;
$user ->setUsername("Anny");
$user ->setSex("girl");
$user ->setAge(20);
$user ->show();
print("<br>;<br>;");
$car = new Car;
$car ->setModel("BW600");
$car ->setNumber(5);
$car ->setPrice(40000);
$car ->show();
?>
반응형
'개발 꿀팁 > PHP' 카테고리의 다른 글
Nginx+Php-fpm 작동 원리 상세설명 (0) | 2022.07.07 |
---|---|
PHP 개발 도구(PHP IDE)를 선택하는 방법 (0) | 2022.07.07 |
이 글을 읽고 나면 당신의 PHP코드는 우아하고 격조높습니다 (0) | 2022.07.07 |
사용하기 좋은 php 온라인 디버깅 도구 (0) | 2022.07.07 |
PHP 빅데이터(50만 이상) 엑셀 솔루션으로 내보내기 (0) | 2022.07.07 |