Jump to content
  • 0

Абстрактные классы


romantik2011
 Share

Question

Изучаю полиморфизм - способность класса-родителя использовать функции, классов-потомков, даже если неизвестно реализованы функции-потомков или нет.

Вот написал элементарный код, без реализации, выдаёт ошибку:


abstract class Db{
abstract function db_conn();
abstract function db_open();
abstract function db_query();
abstract function db_close();
}

class B extends Db{
function db_conn() {};
function db_open() {};
function db_query() {};
function db_close() {};
}

$o1 = new B;

Parse error: syntax error, unexpected ';', expecting T_FUNCTION in C:\www\htdocs\test.ru\www\index.php on line 11

Дальше, пробую по примеру в книге вот этот код, который в классе-родителе

вызывают функцию из производного класса, но интерпретатор тоже ругается.


<?php

class A {
// Выводит, функция какого класса была вызвана
function Test() { echo "Test from A\n"; }
// Тестовая функция — просто переадресует на Test()
function Call() { Test(); }
}
class B extends A {
// Функция Test() для класса B
function Test() { echo "Test from B\n"; }
}
$a=new A();
$b=new B();
$a->Call(); // выводит "Test from A"
$b->Test(); // выводит "Test from B"
$b->Call(); // Внимание! Выводит "Test from B"!

?>

Fatal error: Call to undefined function Test() in C:\www\htdocs\test.ru\www\index.php on line 7

Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 0

может потому-что правильно вот так:

class B extends Db{
function db_conn() {}
function db_open() {}
function db_query() {}
function db_close() {}
}

?

во втором примере так правильно

<?php

class A {
// Выводит, функция какого класса была вызвана
function Test() { echo "Test from A\n"; }
// Тестовая функция — просто переадресует на Test()
function Call() { $this->Test(); }
}
class B extends A {
// Функция Test() для класса B
function Test() { echo "Test from B\n"; }
}
$a=new A();
$b=new B();
$a->Call(); // выводит "Test from A"
$b->Test(); // выводит "Test from B"
$b->Call(); // Внимание! Выводит "Test from B"!

?>

т.к. Test - метод класса A, а не функция.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy