Probleem met niet bestaande functies

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Spike Spade

Spike Spade

11/11/2009 15:20:00
Quote Anchor link
Ik wil vanuit mij smarty template een functie aanroepen uit een object, maar omdat mijn systeem nogal dynamisch is, heb ik niet altijd deze functie.

Is het mogelijk om binnen mijn object een opvang te maken voor alle niet bestaande functies?
Want als ze niet bestaan, dan wil ik ze uit een ander object halen.

Voorbeeld (let niet op evt typfouten e.d. in de code, want ik typ het even uit mijn hoofd.

class Object1
{
public function __constructor()
{
//standaard constructor
}

public function __default()
{

}

public function getAllObjects()
{
//code om gevraagde gegevens te returnen
}
}


class Object2
{
public function __constructor()
{
//standaard constructor
}

public function __default()
{

}

public function getAllSubObjects()
{
//code om gevraagde gegevens te returnen
}
}


Wanneer ik nu vanuit mijn template $object1.getAllSubObjects() aanroep, wil ik dit in class Object1 opvangen en dan de functie uit Object2 gebruiken.

Ik probeerde zelf de __default() functie aan te passen:

public function __default()
{
if!(method_exist($function))
{
$object2 = new Object2();

return $object2->$function();
}
}


Dit werkt alleen niet. Iemand een suggestie?
 
PHP hulp

PHP hulp

02/05/2024 22:14:08
 
TJVB tvb

TJVB tvb

11/11/2009 15:33:00
Quote Anchor link
Kijk eens naar de magic methodes: http://php.net/manual/en/language.oop5.magic.php
 
Spike Spade

Spike Spade

11/11/2009 15:53:00
Quote Anchor link
super!

Tot dusver heb ik nu dit toegevoegd aan Object1

function __call($m, $a)
{
if(!function_exists($m))
{
//Hier moet ik nu het nieuwe object includen

$object2 = new Object2();

}
}


Het volgende probleem. De naam van Object2 is dynamisch. Deze zit in een variabele $prefix

Deze klasse staat in: $prefix . ".php"

Ik moet dus binnen de functie __call nog een include doen, maar dit is al halverwege het object ipv bovenaan.
 
Spike Spade

Spike Spade

11/11/2009 16:00:00
Quote Anchor link
En opgelost!

function __call($m, $a)
{
if(!function_exists($m))
{
if($this->prefix!= "")
{
$url = $this->config->path . $this->prefix . "/objects/" . ucfirst($this->prefix) . "Object.php";

if(file_exists($url))
{
//require the module specific moduleObject. (NewsModule etc)
require $url;

//Build the object name
$objectModuleName = ucfirst($this->prefix)."Module";

//Initialize the Module object
$prefixModule = new $objectModuleName();
}
}
}
}
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.