Eğer peşinde olduğunuz tam olarak ne takip etmek zor. Sorunuz bu kamu yöntemler yaptılar eğer onlar aynı argümanlar olacağını argümanlar gerektirmez, ya da olmadığını ima görünüyor.
Muhtemelen oldukça uzak dahili yansıma sınıfları kullanarak alabilir.
Aşağıda yapıştırılan iki sınıflarının tüm kamu yöntemleri döner karşılaştırmak ve onlar aynı olduklarını sağlamak için hamile hızlı bir testtir. Kolayca olmayan eşleşen genel yöntemleri (yani sadece Class1 var Class2 kamu yöntemleri eşitlik için kontrol) görmezden bunu değiştirebilir. Geçmek who'da verilmesi yanıltıcıdır olacak - ama her sınıfa karşı aramak için yöntemler adları / argümanlar bir dizi yapılabilir.
Her neyse, bu sizin için kullanım olabilir bunu bazı bit olabilir.
$class1 = new Class1();
$class2 = new Class2();
$class3 = new Class3();
$class4 = new Class4();
$class5 = new Class5();
echo ClassChecker::samePublicMethods($class1,$class2); //should be true
echo ClassChecker::samePublicMethods($class1,$class3); //should be false - different values
echo ClassChecker::samePublicMethods($class1,$class4); //should be false -- class3 contains extra public methods
echo ClassChecker::samePublicMethods($class1,$class5); //should be true -- class5 contains extra private methods
class ClassChecker {
public static function samePublicMethods($class1, $class2) {
$class1methods = array();
$r = new ReflectionClass($class1);
$methods = $r->getMethods();
foreach($methods as $m) {
if ($m->isPublic()) {
@$result = call_user_method($m->getName(), $class1);
$class1methods[$m->getName()] = $result;
}
}
$r = new ReflectionClass($class2);
$methods = $r->getMethods();
foreach($methods as $m) {
//only comparing public methods
if ($m->isPublic()) {
//public method doesn't match method in class1 so return false
if(!isset($class1methods[$m->getName()])) {
return false;
}
//public method of same name doesn't return same value so return false
@$result = call_user_method($m->getName(), $class2);
if ($class1methods[$m->getName()] !== $result) {
return false;
}
}
}
return true;
}
}
class Class1 {
private $b = 'bbb';
public function one() {
return 999;
}
public function two() {
return "bendy";
}
}
class Class2 {
private $a = 'aaa';
public function one() {
return 999;
}
public function two() {
return "bendy";
}
}
class Class3 {
private $c = 'ccc';
public function one() {
return 222;
}
public function two() {
return "bendy";
}
}
class Class4 {
public function one() {
return 999;
}
public function two() {
return "bendy";
}
public function three() {
return true;
}
}
class Class5 {
public function one() {
return 999;
}
public function two() {
return "bendy";
}
private function three() {
return true;
}
}