2009-06-22 14 views
15

Benim özel senaryomda, özel bir yöntem içinde düzenli ifadeler kullanarak bazı metin dönüştürme işlemleri yapılmalıdır. Özel yöntem preg_replace_callback çağırır, ancak geri aramaların nesneler üzerinde halka açık olması gerektiği görünüyor, bu yüzden ben özel dünyadan kopmak ve tercih etmediğimde uygulama ayrıntılarını açığa vurmak. Özetle, kısaca: Kapsüllemeyi kaybetmeden bir örnek yöntemini geri arama olarak kullanabilir miyim?Özel örnek yöntemlerini geri arama olarak kullanabilir miyim?

Teşekkürler.

cevap

21

Evet, yapabilirsiniz görünüyor.

Ben bu yöntemi gibi

+0

özellik veya hata? 5.3rc2/win32 ile çalışır. – VolkerK

+2

Whoa, kapsamı hesaba kattılarsa rahatsız edici derecede harika. Bir kez denediğimi kabul edeceğim. –

+0

5.2.9 tarihinde teyit edildi – jason

1

Metin işleme için ayrı bir yardımcı sınıf oluşturabilir ve bu sınıf içinde geri arama yöntemini oluşturabilir misiniz (bu, herkese açık olabilir)? Belirli örnek verilere erişmeniz gerekiyorsa, orijinal sınıfa (nesne) bir referans iletebilirsiniz.

ana sınıfına kamu arayüzü tutarlı ve temiz kalır ve muhtemelen zaten ait olmayan bir sınıfın dışına belirli dize işleme çekin ...

+0

5.2.8 üzerinde test edilmiştir ancak hepsi kod ... çok büyük bir çözüm gibi görünüyor geri aramaları kullanımı için refactored gerektirir olurdu. –

-1

değil korumalı kullanabilir miyim? Bu iki sınıfın ilişkisinin birbiriyle ilişki içinde olduğunu daha iyi bilmem gerekiyordu, ama sınıfı genişletebilmeli ve miras aldığınız yeni korunan yöntemleri kamusallaştırmadan kullanabilmelisiniz.

Bu yardımcı olur umarız!

<?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; 

Yani o preg_replace_callback() görünüyor ya PHP'nin geri arama mekanizması, adı edildiği kapsamı farkındadır:

Alkış

İlgili konular