php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Doc Bug #42302 Class magic methods
Submitted: 2007-08-14 21:27 UTC Modified: 2007-08-15 13:01 UTC
From: brent dot hansen at gmail dot com Assigned:
Status: Not a bug Package: Documentation problem
PHP Version: 5.2.4RC1 OS: XP
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If this is not your bug, you can add a comment by following this link.
If this is your bug, but you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: brent dot hansen at gmail dot com
New email:
PHP Version: OS:

 

 [2007-08-14 21:27 UTC] brent dot hansen at gmail dot com
Description:
------------
This could also be a poor documentation issue.

http://www.php.net/manual/en/language.oop5.paamayim-nekudotayim.php (aka Scope Resolution Operator ::) states that "When an extending class overrides the parents definition of a method, PHP will not call the parent's method. It's up to the extended class on whether or not the parent's method is called. This also applies to Constructors and Destructors, Overloading, and Magic method definitions."

leading to the conclusion that magic methods (e.g., __call) are available as class::_somefunction()

if this is just a documentation error please correct all instances of "class" with "object".


Reproduce code:
---------------
class sometest {
  function __call($method, $arguments) {
    echo $method;
  }
}

// Test #1
$mytest = new sometest;
$mytest->dont_die();
// Test #2
sometest::dont_die();




Expected result:
----------------
// Test #1
dont_die

// Test #2
dont_die

Actual result:
--------------
// Test #1
dont_die

// Test #2
Fatal error: Call to undefined method testclass::dont_die()

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2007-08-15 08:08 UTC] jani@php.net
Reclassified.
 [2007-08-15 13:01 UTC] colder@php.net
"When an extending class overrides the parents definition of a method..."

So no, nothing leads to the conclusion that the magic method __call is used on static calls.

What it means is that:

class A {
  function __call($method, $arguments) {
    echo $method;
  }
}

class B extends A  {
  function __call($method, $arguments) {
    // here, A::__call won't be automatically called
    // as B overrides the definition of A::__call

    // you've to use for example:
    parent::__call($method, $arguments);
  }
}

 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Fri Mar 29 13:01:29 2024 UTC