Hi,
I came across this problem and I was wondering if someone might be able
to explain to my why it is happening. I put together a short example to
illustrate the problem that I am having.
Basically I have one class that performs a certain task. I then have a
second class which extends the first class and performs some tasks in
addition to the first class. Even though ClassA should know nothing
about ClassB since ClassA is the parent, ClassA actually calls ClassB's
exist method when it should be calling it's own.
I know that description is really wordy and probably confusing which is
why I provided below the example code that illustrates the problem.
Doesn't this break the idea of inheritance? I can get it to work if I
change ClassB::exists to some other name such as ClassB::exists2.
If anyone can enlighten me as to why this problem is occurring or
suggest a fix I would really appreciate it. Thank you.
expected output
---------------
ClassB - save
ClassA - save
ClassA - exists
ClassA - update
actual output
-------------
ClassB - save
ClassA - save
Warning: Missing argument 2 for ClassB::exists(), called in
/website/overridetest.php on line 6 and defined in
/website/overridetest.php on line 33
ClassB - exists
ClassA - update
overridetest.php
----------------
<?php
class ClassA {
public function save($value) {
echo "ClassA - save\n";
if ($this->exists($value))
$this->update($value);
else
$this->insert($value);
}
protected function insert($value) {
echo "ClassA - insert\n";
}
protected function update($value) {
echo "ClassA - update\n";
}
public function exists($value) {
echo "ClassA - exists\n";
return true;
}
}
class ClassB extends ClassA {
public function save($value, $classAValue) {
echo "ClassB - save\n";
parent::save($classAValue);
// do some additional work...
}
public function exists($value, $classAValue) {
// does a different search than ClassA
echo "ClassB - exists\n";
return true;
}
}
$c = new ClassB();
$c->save('test', 'test2');
?>
--
Richard Morris
HDD Broker, Inc.
Toll-Free: +1 866 960-3331
International: +1 250 474-6022
Fax: +1 250 474-6099
E-Mail: richard@xxxxxxxxxxxxx
Web Site: www.hddbroker.com
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php