문제

내 특정 시나리오에는 개인 방법 내에서 정규 표현식을 사용하여 일부 텍스트 변환을 수행하는 것이 포함됩니다. 개인 방법은 preg_replace_callback을 호출하지만 콜백은 객체에 공개되어야하는 것 같습니다.

간단히 말해서 : 인스턴스 메소드를 캡슐화를 잃지 않고 콜백으로 사용할 수 있습니까?

감사.

도움이 되었습니까?

해결책

예, 할 수있는 것 같습니다.

<?php

//this works
class a {
   private function replaceCallback($m) { return 'replaced'; }

   public function test() {
        $str = " test test ";
        $result = preg_replace_callback('/test/', array($this, 'replaceCallback'), $str);
        echo $result;
   } 
}

$a = new a();
$a->test();


//this doesn't work
$result = preg_replace_callback('/test/', array(new a(), 'replaceCallback'), ' test test ');    
echo $result;

그래서 그것은 것 같습니다 preg_replace_callback(), 또는 PHP의 콜백 메커니즘은 그 범위를 알고 있습니다.

5.2.8에서 테스트

다른 팁

텍스트 처리를위한 별도의 도우미 클래스를 만들고 해당 클래스 내에서 콜백 메소드를 만들 수 있습니까 (공개 될 수 있습니까)? 특정 인스턴스 데이터에 액세스 해야하는 경우 원래 클래스 (Object)를 참조 할 수 있습니다.

메인 클래스에 대한 공개 인터페이스는 일관되고 깨끗하게 유지되며 특정 문자열 처리를 클래스에서 가져옵니다.

보호를 사용할 수 없습니까? 나는이 두 클래스의 관계가 서로 관련이있는 것이 무엇인지 알아야하지만, 더 명확 해지면서 클래스를 확장하고 공개하지 않고 상속받은 새로운 보호 방법을 사용할 수 있어야합니다.

도움이 되었기를 바랍니다!

건배

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top