>  기사  >  백엔드 개발  >  PHP 매직 메소드 적용 예제 코드 요약

PHP 매직 메소드 적용 예제 코드 요약

伊谢尔伦
伊谢尔伦원래의
2017-06-29 13:34:391452검색

이 글에서는 주로 PHP 클래스의 Magic Method(Magic Method)에 대한 간략한 요약을 소개합니다. 이러한 메소드에는 constructor(), destruct(), call(), callStatic(), get(), set(), toString이 포함됩니다. () 등 필요한 친구가 참고하면 됩니다

1. constructor() 및 destruct()

는 인스턴스 생성/파기 시 호출되며 둘 다 0개 이상의 매개변수를 전달할 수 있습니다.

class A
 {
  function A()
  {
   echo "build A";
  }

  function destruct()
  {
   echo "destroy A";
  }
 }

 $obj = new A();
 //unset($obj);

참고: 소멸자 메서드는 특정 객체에 대한 다른 참조가 없거나 종료 시퀀스 중에 어떤 순서로든 호출됩니다.

  constructor에 대해 PHP5.3.3부터 정의는 다음과 같습니다. 특정 네임스페이스에 있는 클래스의 클래스 이름으로 명명된 메서드는 더 이상 생성자로 간주되지 않습니다. 네임스페이스가 없는 클래스에서는 이전과 마찬가지로 여전히 생성자입니다. 예:

namespace Foo;
class Bar {
  public function Bar() {
    // treated as constructor in PHP 5.3.0-5.3.2
    // treated as regular method as of PHP 5.3.3
  }
}

Foo 네임스페이스가 없으면 Bar()도 생성자로 사용됩니다. 또한 다음과 같은 상황이 존재하는 경우:

function construct()
  {
   echo "construct A";
  }

  function A()
  {
   echo "build A";
  }

  function destruct()
  {
   echo "destroy A";
  }
 }

에 클래스 이름과 동일한 이름을 가진 constructor() 및 함수가 모두 포함되어 있으면 constructor()만 호출됩니다.

2. call() 및 callStatic()

존재하지 않는 메소드를 호출하려고 할 때 호출됩니다. 두 개의 매개변수, 하나는 메소드 이름이고 다른 하나는 호출된 메소드의 매개변수 array입니다.

class MethodTest
{
  public function call($name, $arguments)
  {
    // Note: value of $name is case sensitive.
    echo "Calling object method '$name' "
       . implode(&#39; &#39;, $arguments). "<br>";
  }

  public static function callStatic($name, $arguments)
  {
    // Note: value of $name is case sensitive.
    echo "Calling static method &#39;$name&#39; "
       . implode(&#39; &#39;, $arguments). "<br>";
  }
}

$obj = new MethodTest;
$obj->runTest(&#39;in&#39;,&#39;object&#39;,&#39;context&#39;);
MethodTest::runTest(&#39;in&#39;,&#39;static&#39;,&#39;context&#39;);

그 중 $arguments는 배열로 전달됩니다. 실행 결과:

객체 컨텍스트에서 객체 메서드 'runTest' 호출
정적 컨텍스트에서 정적 메서드 'runTest' 호출

또한 protected 및 private 함수의 범위에 주의하세요:

class TestMagicCallMethod {
  public function foo()
  {
    echo METHOD.PHP_EOL."<br>";
  }

  public function call($method, $args)
  {
    echo METHOD.PHP_EOL."<br>";
    if(method_exists($this, $method))
    {
      $this->$method();
    }
  }
  
  protected function bar()
  {
    echo METHOD.PHP_EOL."<br>";
  }

  private function baz()
  {
    echo METHOD.PHP_EOL."<br>";
  }
}

$test  =  new TestMagicCallMethod();
$test->foo();
/**
 * Outputs:
 * TestMagicCallMethod::foo
 */

$test->bar();
/**
 * Outputs:
 * TestMagicCallMethod::call
 * TestMagicCallMethod::bar
 */

$test->baz();
/**
 * Outputs:
 * TestMagicCallMethod::call
 * TestMagicCallMethod::baz
 */

3.get() 및 set ()

  존재하지 않는 객체의 속성을 읽으려고 할 때 호출됩니다.

 참고: 이 함수를 사용하여 Java의 리플렉션과 유사한 다양한 작업을 구현할 수 있습니다.

class Test
{
  public function get($key)
  {
   echo $key . " not exists";
  }
  public function set($key,$value)
  {
   echo $key . " = ".$value;
  }
}

$t = new Test();
echo $t->name."<br>";
$t->name = "abc";

출력:
name not presents
name = abc

4.toString()

이 메소드는 Java의 toString() 메소드와 유사하며 객체를 직접 인쇄할 때 이 함수를 호출합니다. 문자열을 반환해야 합니다.

class Test
{
  private $name = "abc";
  private $age = 12;

  public function toString()
  {
    return "name : $this->name, age : $this->age";
  }
}

$t = new Test();
echo $t;

출력:

이름: abc, 연령: 12

위 내용은 PHP 매직 메소드 적용 예제 코드 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.