[ create a new paste ] login | about

Link: http://codepad.org/vkSnompA    [ raw code | output | fork ]

PHP, pasted on Oct 28:
<?php

abstract class A
{
   public function renderSomethingRecursive()
   {
      static $inside = 0;
      echo "CALL: ", __CLASS__, '::', __FUNCTION__, "($inside) \n";
      $inside++;
      if ($inside > 10) return;
      // this function can call itself
      self::renderSomethingRecursive(); // ERROR!!!!
   }

   abstract public function addSomething($value);
}

class B extends A
{
   public function renderSomethingRecursive()
   {
      static $inside = 0;
      echo "CALL: ", __CLASS__, '::', __FUNCTION__, "($inside) \n";
      $inside++;
      throw new Exception ('This time this method must not be called!');
   }

   public function addSomething ($value)
   {
      static $inside = 0;
      echo "CALL: ", __CLASS__, '::', __FUNCTION__, "($inside) \n";
      if ($inside > 10) return;
      $inside++;
      parent::renderSomethingRecursive();
   }
}

$obj = new B();
$obj->addSomething('value');


Output:
1
2
3
4
5
6
7
8
9
10
11
12
CALL: B::addSomething(0) 
CALL: A::renderSomethingRecursive(0) 
CALL: A::renderSomethingRecursive(1) 
CALL: A::renderSomethingRecursive(2) 
CALL: A::renderSomethingRecursive(3) 
CALL: A::renderSomethingRecursive(4) 
CALL: A::renderSomethingRecursive(5) 
CALL: A::renderSomethingRecursive(6) 
CALL: A::renderSomethingRecursive(7) 
CALL: A::renderSomethingRecursive(8) 
CALL: A::renderSomethingRecursive(9) 
CALL: A::renderSomethingRecursive(10) 


Create a new paste based on this one


Comments: