Achterhalen class
Hallo,
Weet iemand of het mogelijk is om te achterhalen vanuit welke class je een functie of class hebt geopend
Zoiets als __CLASS__ Maar dan niet de huidige Class maar waar je hem vanuit hebt opgeroepen.
Alvast bedankt.
Weet iemand of het mogelijk is om te achterhalen vanuit welke class je een functie of class hebt geopend
Zoiets als __CLASS__ Maar dan niet de huidige Class maar waar je hem vanuit hebt opgeroepen.
Alvast bedankt.
je hebt de instantie in een object zitten? Dan kan je daar de class uit halen. Anders moet je eens naar reflect kijken.
Dit bedoel ik dus:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Gewijzigd op 10/08/2010 15:29:40 door Jan Erik Van woerden
Wil je eigenlijk niet gewoon overerven? inherit dus?
Nee, ik wil gewoon graag achterhalen welke class de class aanroept.
Zo kan ik namelijk classes verschillende rechten geven omdat ik met plugins ga werken en ik niet wil toelaten dat het database door plugins wordt gebruikt.
Maar ik weet dus niet of dit mogelijk is.
Zo kan ik namelijk classes verschillende rechten geven omdat ik met plugins ga werken en ik niet wil toelaten dat het database door plugins wordt gebruikt.
Maar ik weet dus niet of dit mogelijk is.
return get_class($this);
Maar dat komt dus ook weer neer op __CLASS__ en dat is dus de huidige class.
als je eens uitlegt waarom je het zo wilt doen, en wat je precies wilt bereiken, kunnen wij je denk ik wel verder helpen. Op deze manier komen we niet ver.
Ik wil namelijk in een database instellingen opslaan van een class.
En ik wil deze via de class "options" aanroep.
En als je dan deze class aanroept via bijvoorbeeld class "market" dan moet hij weten dat hij alleen de opties van class "market" moet opzoeken.
Dit is meer ter beveiliging en ook om het makkelijker te maken voor mensen die een plugin gaan maken voor het framework dat ik aan het maken ben.
Ook wil ik graag dat je bijvoorbeeld alleen de MySQL class kunt aanroepen door de door mij aangegeven classes.
Groeten Jan Erik
En ik wil deze via de class "options" aanroep.
En als je dan deze class aanroept via bijvoorbeeld class "market" dan moet hij weten dat hij alleen de opties van class "market" moet opzoeken.
Dit is meer ter beveiliging en ook om het makkelijker te maken voor mensen die een plugin gaan maken voor het framework dat ik aan het maken ben.
Ook wil ik graag dat je bijvoorbeeld alleen de MySQL class kunt aanroepen door de door mij aangegeven classes.
Groeten Jan Erik
Code (php)
Wat gebeurt er als je dit uitvoert? Toch de classname van de instantie en niet 4x hetzelfde?
Maar ik wil eigenlijk geen extends gebruiken maar gewoon zoals ik in mijn 2de reactie liet zien.
Ik begin dus te twijfelen of dit bestaat.
Ik begin dus te twijfelen of dit bestaat.
http://php.net/manual/en/function.debug-backtrace.php
Maar zoals de naam suggereert is dit alleen voor debug-doeleinden bedoeld.
EDIT: Je kan ook zoiets proberen: http://php.net/manual/en/runkit.sandbox.php
Maar zoals de naam suggereert is dit alleen voor debug-doeleinden bedoeld.
EDIT: Je kan ook zoiets proberen: http://php.net/manual/en/runkit.sandbox.php
Gewijzigd op 11/08/2010 00:52:25 door Pim -
Bedankt,
Dit is precies wat ik bedoelde :)
Ik ga nog even verder zoeken of het misschien toch mogelijk is om hiervoor een gewone function te vinden.
Want wat je zegt suggereert dit dus dat het voor debug-doeleinden bedoeld is.
Maar erg bedankt. :)
EDIT:
Het is volgensmij niet mogelijk.
Want als ik verder zoek is dit de enige andere manier.
Maar erg bedankt.
Dit is precies wat ik bedoelde :)
Ik ga nog even verder zoeken of het misschien toch mogelijk is om hiervoor een gewone function te vinden.
Want wat je zegt suggereert dit dus dat het voor debug-doeleinden bedoeld is.
Maar erg bedankt. :)
EDIT:
Het is volgensmij niet mogelijk.
Want als ik verder zoek is dit de enige andere manier.
Maar erg bedankt.
Gewijzigd op 11/08/2010 00:55:47 door Jan Erik Van woerden
Maar ik snap de bedoeling nog niet helemaal. Je maakt een framework, maar wil dat plugins in een sandbox worden gedraaid. Maar kunnen users dan plugins toevoegen? Anders maakt het toch niet uit? Wat mensen op hun eigen server doet is toch hun probleem?
Op zich zou het goed mogelijk moeten zijn om het voor een plugin bijna onmogelijk te maken een instantie van je database object te kunnen bemachtigen zolang je de verwijzing ernaar maar niet je sandbox binnen kan slepen. Gewoon geen globale variabelen en singletons gebruiken, dan zou een plugin toch niet bij de api naar de database kunnen komen?
Het antwoord van een functie beïnvloeden op basis van de context waarin je hem aanroept, daar heb je inderdaad trucjes voor nodig. Mijin onderbuik zegt wel dat je dit meer ellende en kopbrekers dan voordelen gaat opleveren, al kan ik zo niet een voorbeeld verzinnen. Waar probeer je je framework eigenlijk tegen te beschermen? Wat is precies het doel van deze beveiliging? Want zoiets maakt de toegang tot bijvoorbeeld opties van andere plugins moeilijker, maar nog niet onmogelijk.
Het antwoord van een functie beïnvloeden op basis van de context waarin je hem aanroept, daar heb je inderdaad trucjes voor nodig. Mijin onderbuik zegt wel dat je dit meer ellende en kopbrekers dan voordelen gaat opleveren, al kan ik zo niet een voorbeeld verzinnen. Waar probeer je je framework eigenlijk tegen te beschermen? Wat is precies het doel van deze beveiliging? Want zoiets maakt de toegang tot bijvoorbeeld opties van andere plugins moeilijker, maar nog niet onmogelijk.
Nee, het database is niet eens het belangrijkste.
Ik wil graag dat je aparte instellingen hebt voor elke plugin.
En zo krijg je alleen de instellingen van de huidige plugin te zien.
Dit is makkelijker voor de maker van de plugin.
Ik wil graag dat je aparte instellingen hebt voor elke plugin.
En zo krijg je alleen de instellingen van de huidige plugin te zien.
Dit is makkelijker voor de maker van de plugin.
Dat kan veel makkelijker. Geef elke plugin een basis-class die een abstracte plugin class extend. Als elke plugin dan een $_name property invult, kan je heel makkelijk de configuratie scheiden.
Gewoon zoiets
@Jelmer, maar je kan altijd nog construtors aanroepen
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
class Config
{
private $_settings;
public function __construct($name)
{
$this->_settings = parse_ini_file($name.'.ini');
}
}
abstract class Plugin
{
public function getConfig()
{
return new Config($this->_name);
}
}
class PluginA extends Plugin
{
private $_name = 'pluginA';
}
$plugin = new PluginA;
$config = $plugin->getConfig();
?>
class Config
{
private $_settings;
public function __construct($name)
{
$this->_settings = parse_ini_file($name.'.ini');
}
}
abstract class Plugin
{
public function getConfig()
{
return new Config($this->_name);
}
}
class PluginA extends Plugin
{
private $_name = 'pluginA';
}
$plugin = new PluginA;
$config = $plugin->getConfig();
?>
Gewoon zoiets
@Jelmer, maar je kan altijd nog construtors aanroepen
Gewijzigd op 11/08/2010 16:04:50 door Pim -




