2011-10-23 2 views
0

Когда я прохожу $this к функции, я получил сообщение об ошибке, как это, The function does not exists.

// In class A 
class A extents F 
{ 
    function m() 
    { 
     Do($this); 
    } 

    function t() 
    { 
    } 
} 

class B extents F 
{ 
    function m() 
    { 
     Do($this); 
    } 

    function t() 
    { 

    } 
} 

// Some where in .inc.php file 
function Do(F $obj) 
{ 
    $obj->t(); 
} 

На самом деле, у меня есть много классов наследовать от одного базового класса. Все эти классы имеют общие функции. Мне нужна функция, чтобы справиться со всеми.

+1

заменить 'extents' на' extends' – Manhim

+0

У вас есть несколько ошибок. Например, PHP не поддерживает подсказку типов ('Do (F $ obj)' не прав, должно быть 'Do ($ obj)'). –

+0

также, вы пытались удалить требование класса F для функции Do? потому что, если у вас нет метода t() в вашем абстрактном классе, то я думаю, что это может быть проблемой. – Manhim

ответ

1

Вы не можете использовать Do() в качестве имени функции, потому что это reserved word

Кроме того, вы не можете использовать extents, потому что это extends

Кроме того, вы не можете использовать extends F, потому что у вас нет класса F там

Это один работает

http://sandbox.phpcode.eu/g/450ee/1

<?php 
class F{ 

} 
class A extends F 
{ 
    function m() 
    { 
     _Do($this); 
    } 

    function t() 
    { 
     echo "<br />Class A works"; 
    } 
} 

//removed unused class B 
$a = new A(); 
$a->m(); 

// Some where in .inc.php file 
// Changed Do to _Do, because Do is reserved word 
function _Do(A $obj) 
{ 
    $obj->t(); 
} 
+0

@hakre: Разве это не ваше редактирование, просто какое-то описание, комментарий, который должен содержать объект $ obj? – genesis

+0

Ну, как вы называете 't()' позже, это на самом деле предварительное условие, намного больше, чем комментарий. – hakre

+1

@MichaelMadsen: Действительно? Посмотрите [здесь] (http://codepad.org/qSR7TcyS), и вы увидите, что это не имеет значения [в данном случае] – genesis

Смежные вопросы