2

Does anybody know offhand the way to tell whether I'm being called statically (Classname::function) or inside an object ($classInstance->function) inside a PHP method?

Pekka
  • 442,112
  • 142
  • 972
  • 1,088
  • 1
    That's what the static keyword is there for. If you're mixing the two up you should be getting a warning. – Azeem.Butt Oct 30 '09 at 02:50
  • A static function should not be called non-statically, and a non-static method should not be called statically. Yet another thing in PHP that should generate a fatal error, but does not. – Annika Backstrom Oct 30 '09 at 03:25
  • In the case at hand, I had to fix a bug quickly to get to bed :) But you're right, of course. – Pekka Oct 30 '09 at 04:01
  • possible duplicate of [How do I check in PHP that I'm in a static context (or not)?](http://stackoverflow.com/questions/1858538/how-do-i-check-in-php-that-im-in-a-static-context-or-not) – Jocelyn Oct 28 '12 at 23:52

2 Answers2

10

Admittedly not offhand...but Sean Coates has a cool and fairly simple approach to finding this out:

$isStatic = !(isset($this) && get_class($this) == __CLASS__);
Ben Regenspan
  • 10,058
  • 2
  • 33
  • 44
1

Check if $this is set and equal to the class. It will be equal for an instance call and non-equal (or null) for a static call.

Amber
  • 507,862
  • 82
  • 626
  • 550
  • This is not actually correct. See my linked blog post in the accepted answer. `$this` can be set if a method is called statically, and it might not even belong to the containing class. – scoates Dec 10 '12 at 17:21