Sziasztok!
A procedurális PHP4-el már foglalkozom egy jóideje, de az OOP-vel és a PHP5-el csak most ismerkedek.
Találtam egy példát a "PHP fejlesztés felsőfokon (PHP5)" című könyvben az osztályok öröklődésére. Ki is próbáltam:
<?php
class User
{
public $name;
public $birthday;
public function ______construct($name, $birthday)
{
$this->name = $name;
$this->birthday = $birthday;
}
public function hello()
{
return "Hello $this->name!\n";
}
public function goodbye()
{
return "Goodbye $this->name!\n";
}
public function age()
{
$ts = strtotime($this->birthday);
if( $ ts === -1)
{
return "Unknown";
}
else
{
$diff = timeO - $ts;
return floor($diff/(24*60*60*365)) ;
}
}
}
$user = new User('george', '10 Oct 19 7 3 ' );
echó $user->hello();
echó "You are ".$user->age()." years old.\n";
echó $user->goodbye();
?>
Majd íme a könyvben szereplő második osztály:
class AdminUser extends User
{
public $password;
public function _____ construct($name, $birthday)
{
parent::__ construct($name, $birthday);
$db= dba_popen("/data/etc/auth.pw", "r", "ndbm");$this->password = dba_fetch($db, $name);
dba_close($db);
}
public function authenticate($suppliedPassword)
{
if($this->password === $suppliedPassword) {
return true;
}
else
{
return falsé;
}
}
}
----------------------------------
Ezek alapján próbából írtam én is két osztályt:
<?php
class Tanulo
{
public $nev = "";
public $kor = 0;
function __construct($nev, $kor)
{
$this->nev = $nev;
$this->kor = $kor;
}
function korNoveles()
{
$this->kor += 1;
}
function nevValtoztat($nev)
{
$this->nev = $nev;
}
}
class TanuloAuth extends Tanulo
{
public $jelszo = "";
function __construct($nev, $kor, $jelszo);
{
parent::__construct($nev, $kor);
$this->jelszo = $jelszo;
}
}
function listaz($tomb)
{
echo "<table border=\"1\">";
foreach($tomb as $elem)
{
echo "<tr><td>";
echo "Név: <b>".$elem->nev."</b><br>";
echo "Kor: ".$elem->kor."<br>";
echo "</td></tr>";
}
echo "</table>";
}
function listaz2($tomb)
{
echo "<table border=\"1\">";
foreach($tomb as $elem)
{
echo "<tr><td>";
echo "Név: <b>".$elem->nev."</b><br>";
echo "Kor: ".$elem->kor."<br>";
echo "Jelszó: ".$elem->jelszo;
echo "</td></tr>";
}
echo "</table>";
}
//------------------------------
$obj[] = new Tanulo("Dani", 19);
$obj[] = new Tanulo("Zsófi", 18);
$obj[] = new Tanulo("Dorka", 22);
$obj[] = new Tanulo("Dávid", 22);
listaz($obj);
$obj3[] = new Tanulo("Andi", 18, "jelszo");
$obj3[] = new Tanulo("Judit", 18, "jelszo");
$obj3[] = new Tanulo("Éva", 19, "jelszo");
$obj3[] = new Tanulo("Tina", 20, "jelszo");
?>
Amint lefuttatom, a következő hibaüzenet fogad:
Fatal error: Non-abstract method TanuloAuth::__construct() must contain body in C:\XAMPP\xampp\htdocs\php5\obj1.php on line 28
A gond ezzel a sorral van:
parent::__construct($nev, $kor);
- Mivel tudnám mégis örököltetni a konstruktort, úgy hogy a származtatott osztályban is működjön egy kibővített konstruktor?
- Miért nem működik nekem a könyvben ismertetettek alapján?
Köszi.
MysteryKe.
-----------
XAMPP 1.7.3
PHP 5.3.1
Apache: Apache 2.2.14