我有一种感觉,我想做的事情是不可能的,因为我找不到任何东西。我有一些类从另一个类扩展。在要扩展的类的内部,我必须根据哪个类调用它来调用一些唯一的代码。
这是一个深入的项目,所以我创建了一个测试用例来解释我想要做的事情:
class parent {
function traverseTable($table) {
foreach($table->getElementsByTagName('tr') {
$rowCnt++;
$this->uniqueSearch($rowCnt);
}
}
}
class child1 extends parent {
function search($input) {
//parse input, get $table
$this->traverseTable($table);
}
function uniqueSearch($rowCnt) {
echo 'child1';
//Do different things
}
}
class child2 extends parent {
function search($input) {
//parse input, get $table
$this->traverseTable($table);
}
function uniqueSearch($rowCnt) {
echo 'child2';
//Do different things
}
}
基本上,我希望能够在Class Parent中的循环内调用uniqueSearch()函数;但上面的语法似乎不起作用。有人有什么想法吗?此时,uniqueSearch函数的实际大小从20-100行不等,但可能会变大。
答案 0 :(得分:2)
因此,您希望以多态方式调用uniqueSearch
。
Your first problem与此无关,parent
是保留字:
致命错误:不能使用'parent'作为类名,因为它在第2行保留
修复此问题。
Your next problem是一个简单的语法错误:
解析错误:语法错误,第4行意外“{”
修复此问题。
然后,you have the issue您的测试用例中没有$table
,没有getElementsByTagName
。此外foreach ($table->getElementsByTagName('tr'))
无效PHP。
修复此问题。
Your testcase doesn't call any functions
修复此问题。
结果:
<?php
class base {
function traverseTable($table) {
foreach ($table as $element) {
$rowCnt++;
$this->uniqueSearch($rowCnt);
}
}
}
class child1 extends base {
function search($input) {
//parse input, get $table
// dummy for now:
$table = Array(0,1,2,3);
$this->traverseTable($table);
}
function uniqueSearch($rowCnt) {
echo 'child1';
//Do different things
}
}
class child2 extends base {
function search($input) {
//parse input, get $table
// dummy for now:
$table = Array(0,1,2,3);
$this->traverseTable($table);
}
function uniqueSearch($rowCnt) {
echo 'child2';
//Do different things
}
}
$c1 = new child1;
$c2 = new child2;
$c1->search("");
$c2->search("");
?>
child1child1child1child1child2child2child2child2
事实证明,这个问题与多态性无关;只是愚蠢的语法错误。
感谢您的参与。
答案 1 :(得分:1)
在父类中声明uniqueSearch()
作为抽象方法(这意味着该类也必须声明为抽象)。这意味着每个孩子必须自己实施uniqueSearch()
方法,所以它肯定存在。
abstract class parent {
function traverseTable($table) {
foreach($table->getElementsByTagName('tr') {
$rowCnt++;
$this->uniqueSearch($rowCnt);
}
}
abstract function uniqueSearch($rowCnt);
}