get called class? beste manier?
Volgens mij heb ik 2 opties: of de class achterhalen via debug_backtrace(), of de class naam via __CLASS__ meegeven aan de functie. Deze laatste optie vind ik minder prettig omdat ik dan telkens een variabele moet meesturen, maar van de andere kant lees ik ook dat de de debug_backtrace() functie niet zo heel snel is.
Wat moet ik doen? Wat is de beste afweging als je kijkt naar gemak versus performance?
Methode 1:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
static public function foo() {
$class = debug_backtrace();
$class = $class[1]['file'];
// doe iets met de class naam
}
?>
static public function foo() {
$class = debug_backtrace();
$class = $class[1]['file'];
// doe iets met de class naam
}
?>
Aanroepen middels: Classnaam::foo();
Methode 2
Aanroepen middels: Classnaam::foo(_CLASS_);
Gewijzigd op 17/11/2010 10:57:57 door Ozzie PHP
Maar als ik het probeer, dan krijg ik in $class[1]['class'] de class waar foo onderdeel van is, niet wat je zou verwachten bij get_called_class. Dus hij doet niet wat hij moet doen?
Alternatief voor 2 is:
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 Foo
{
static public function test($class = __CLASS__)
{
echo "Called from " . $class;
}
}
class Bar extends Foo
{
static public function test($class = __CLASS__)
{
return parent::test($class);
}
}
class Baz extends Bar
{
static public function test($class = __CLASS__)
{
return parent::test($class);
}
}
Baz::test();
?>
class Foo
{
static public function test($class = __CLASS__)
{
echo "Called from " . $class;
}
}
class Bar extends Foo
{
static public function test($class = __CLASS__)
{
return parent::test($class);
}
}
class Baz extends Bar
{
static public function test($class = __CLASS__)
{
return parent::test($class);
}
}
Baz::test();
?>
Voordeel is dat je bij de aanroepen niet altijd meet __CLASS__ hoeft mee te geven. Nadeel is dat je in iedere extended class al je static functies waar je het nodig hebt weer moet opnoemen.
Toevoeging op 17/11/2010 11:09:59:
Jelmer rrrr op 17/11/2010 10:54:06:
Maar als ik het probeer, dan krijg ik in $class[1]['class'] de class waar foo onderdeel van is, niet wat je zou verwachten bij get_called_class. Dus hij doet niet wat hij moet doen?
Als ik vanuit class bar de functie foo in de class foo aanroep dan geeft ie bij mij wel gewoon de classnaam 'bar' terug. Bij jou niet?
Gewijzigd op 17/11/2010 11:10:52 door Ozzie PHP