Простая абстракция класса в php не работает (конфликтующие имена?) - PullRequest
1 голос
/ 07 июля 2010

Вот простой php-код

<?
abstract class A{
abstract public function a($x);
}
class B extends A{
public function a($x)
{
echo $x;
}
}

$q = new B;
$q->a(10);
?>

, который дает: PHP Фатальная ошибка: Невозможно вызвать абстрактный метод A :: a ()

, но изменить имя функции на что-токроме «а» работает.

Так что же на самом деле происходит с вызовом (10)?Я не вижу здесь логики.

1 Ответ

3 голосов
/ 07 июля 2010

У тебя довольно очевидная проблема.Поскольку у вас нет метода __construct(), abstract public function a(); - ваш конструктор (php 4).Ваша фатальная ошибка возникает при создании экземпляра класса B, а не при вызове метода a() в экземпляре класса B.

Если вы измените имя вашего метода a() на что-то другое, все будет работать как задумано!

Пример, который работает:

<?php
abstract class A
{
    abstract public function test($x);
}

class B extends A
{
    public function test($x)
    {
        echo $x;
    }
}

$q = new B();
$q->test(10);
?>
...