Versio

Achterhalen class

Overzicht Reageren

Jan Erik Van woerden

Jan Erik Van woerden

10/08/2010 14:39:49
Quote Anchor link
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.
 
PHP hulp

PHP hulp

23/05/2012 20:13:45
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Wesley Overdijk

wesley Overdijk

10/08/2010 15:06:37
Quote Anchor link
je hebt de instantie in een object zitten? Dan kan je daar de class uit halen. Anders moet je eens naar reflect kijken.
 
Jan Erik Van woerden

Jan Erik Van woerden

10/08/2010 15:27:23
Quote Anchor link
Dit bedoel ik dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
class classA
{
    static function zoekAanroepClass()
    {

        return 'Aangeroepen door (Hier zou dan dus classB moeten komen te staan als classB hem zo aanroept)';
    }
}


class classB
{
    function
classAaanroepen()
    {

        return classA::zoekAanroepClass();
    }
}


$classB = new classB;
echo $classB->classAaanroepen();
?>
Gewijzigd op 10/08/2010 15:29:40 door Jan Erik Van woerden
 
Opolo Webdesign

Opolo Webdesign

10/08/2010 15:33:45
Quote Anchor link
Wil je eigenlijk niet gewoon overerven? inherit dus?
 
Jan Erik Van woerden

Jan Erik Van woerden

10/08/2010 16:08:53
Quote Anchor link
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.
 
Hipska BE

Hipska BE

10/08/2010 18:41:27
Quote Anchor link
return get_class($this);
 
Jan Erik Van woerden

Jan Erik Van woerden

10/08/2010 20:32:36
Quote Anchor link
Maar dat komt dus ook weer neer op __CLASS__ en dat is dus de huidige class.
 
Wesley Overdijk

wesley Overdijk

10/08/2010 21:28:35
Quote Anchor link
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.
 
Jan Erik Van woerden

Jan Erik Van woerden

10/08/2010 22:19:55
Quote Anchor link
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
 
Hipska BE

Hipska BE

10/08/2010 23:42:24
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php

class A {
    public function name1(){
        echo get_class($this);
    }

    
    public function name2(){
        echo __CLASS__;
    }
}


class B extends A { }

$a = new A();
$b = new B();

var_dump($a->name1(), $b->name1(), $a->name2(), $b->name2());

?>


Wat gebeurt er als je dit uitvoert? Toch de classname van de instantie en niet 4x hetzelfde?
 
Jan Erik Van woerden

Jan Erik Van woerden

11/08/2010 00:00:58
Quote Anchor link
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.
 
Pim -

Pim -

11/08/2010 00:29:43
Quote Anchor link
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
Gewijzigd op 11/08/2010 00:52:25 door Pim -
 
Jan Erik Van woerden

Jan Erik Van woerden

11/08/2010 00:52:30
Quote Anchor link
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
 
Pim -

Pim -

11/08/2010 13:17:26
Quote Anchor link
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?
 
Jelmer rrrr

Jelmer rrrr

11/08/2010 15:15:30
Quote Anchor link
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.
 
Jan Erik Van woerden

Jan Erik Van woerden

11/08/2010 15:20:09
Quote Anchor link
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.
 
Pim -

Pim -

11/08/2010 16:02:58
Quote Anchor link
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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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();
?>

Gewoon zoiets

@Jelmer, maar je kan altijd nog construtors aanroepen
Gewijzigd op 11/08/2010 16:04:50 door Pim -
 



Overzicht Reageren