Portál AbcLinuxu, 2. listopadu 2025 18:55
Ahoj, je mozne prepsat funkci? Něco jako bych si vytvořit instanci třídy Kniha, a chtěl aby mi vždy vracela jako název nastavený text. Nějak podobne jako to lze třeba v javě?
$kniha = new Kniha() {
public function getNazev() {
return "novy nazev";
}
}
a potom vždy když by se zavolalo: $kniha->getNazev() dostal bych "novy nazev". Je neco takoveho v php mozne? a jak na to? díky.
class Kniha
{
public function getNazev()
{
return "novy nazev";
}
}
$kniha = new Kniha();
echo $kniha->getNazev();
Predpokladam ale, ze ten nazev tam chces strkat zvenku:
class Kniha
{
public function __construct($nazev)
{
$this->nazev = $nazev;
}
private $nazev;
public function getNazev()
{
return $this->nazev;
}
}
$kniha = new Kniha("novy nazev");
echo $kniha->getNazev();
<?php
class Kniha{
private $name;
public function __construct($name) {
$this->name = $name;
}
public function getName(){
return $this->name;
}
}
$kniha = new Kniha("Alenka v říši divů");
echo $kniha->getName();
<?php
date_default_timezone_set('Europe/Prague');
class Kniha{
private $name;
public function __construct($name) {
$this->name = $name;
}
public function __call($method, $args){
if(isset($this->$method)){
$func = $this->$method;
$func($args);
}
}
public function getName(){
return $this->name;
}
}
$kniha = new Kniha("Alenka v říši divů");
echo $kniha->getName(),"
\n";
$kniha->prnOnTheFly = function(){ echo "Alenka flying"; };
$kniha->prnOnTheFly();
echo "
\n";
$kniha2 = new Kniha("Alenka v říši divů 1½");
$kniha2->prnOnTheFly();//nic se nestane
echo "
\n";
Ale je to zjednodušené a může to mít nějaké vedlejší efekty viz __call.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.