Looking for more information on how to do PHP the right way? Check out PHP: The Right Way

Hubert Brylkowski:
PHP can’t jump? Thing about recursion.
Dec 26, 2016 @ 21:14:37

Hubert Brylkowski has written up a post to his site looking at recursion in PHP and some of the limitations that can some with traditional methods.

Let’s get straight into the problem – assume we want to calculate nth Fibonacci number. Definition : F(n) = F(n-1) + F(n-2) with seed values F(1) = F(2) = 1 so the most intuitive way to do this is just from the definition (recursive). [...] Yay, everything works, so let’s play with bigger numbers. I would like to know the 35th Fibonacci number. On my machine it takes about 8 seconds. That sucks and takes definitely too long.

He talks about what some of the issues with this normal recursive method is (including how many times the function is called) and a possible way to resolve it. He updates this to use the BCMath handling as the numbers are starting to get larger but soon hits the max nesting level for PHP itself. Instead of traditional recursion, he suggests using a few functions/methods to to "jump" from one call to the next without one having to call the other. He includes some refactoring of this solution and a bit of benchmarking to show the performance gain over traditional methods.

PHPMaster.com:
Understanding Recursion
Jun 06, 2013 @ 14:32:41

On PHPMaster.com today there's a new tutorial posted that talks about something that can be a more difficult concept for budding developers to grasp - recursion.

In one of my previous articles I wrote about iterators and how you can use them. Today I’d like to look at the fraternal twin of iteration: recursion. A recursive function is one that calls itself, either directly or in a cycle of function calls. Recursion can also refer to a method of problem solving that first solves a smaller version of the problem and then uses that result plus some other computation to formulate an answer to the original problem.

He starts with an example - one function showing how to calculate a factorial using just looping and the other by having the function call itself. He talks some about the different types of recursion (direct/indirect) and gives a more practical example, a "find in array" function for one with nested subarrays. He also briefly mentions "head" and "tail" recursion, the difference being if it waits for a return value or not. He also offers some general advice when it comes to using recursion and how you have to watch for optimization issues.

Web & PHP Magazine:
Issue #12 - Don't Get in a PECL
Mar 08, 2013 @ 16:23:36

The latest issue of the Web and PHP Magazine has been published - issue #12, "Don't get in a PECL". This latest issue includes articles like:

• "The Power of PECL" by Simon Holywell
• "Be 'ready' if you want to be done!" by Steffan Surdek
• "All Data is Relational" by Cory Isaacson
• "Fixing PHP Production Problems with APM" by Dan Delany and Chris Kelly
• "Trust" by Sebastian Bergmann

Ryan Gantt's Blog:
Anonymous recursion in PHP
Aug 11, 2011 @ 15:55:35

In a recent post to his blog Ryan Gantt looks at an interesting way to get around a limitation in PHP dealing with anonymous recursion and closures that throws a Fatal error when called.

Turns out that variables called as functions must be an instance of Closure, an instance of a class which implements __invoke(), or a string representing a named function in the global namespace. In the anonymous function body above, \$fibonacci is none of these. It is an undeclared, free variable in the closure created by the anonymous function. At the time when it’s called, it hasn’t been bound—hence the Notice that you would have gotten if error reporting were set at a high enough threshold - and therefore can’t be called as anything, let alone as a function.

He tried using the "use" functionality PHP closures have to bring a variable/object/etc into the scope of the running function, but it still threw an error. As it turns out, the combination of "use"-ing the object and calling it by reference handles things correctly. He takes this method and applies it in two examples - one call in an array_map function and another in an array_reduce.

Andrea Giammarchi's Blog:
PHP Serialization And Recursion Demystified
Sep 09, 2009 @ 20:39:11

Andrea Giammarchi has posted a new item to his blog looking at freezing and unfreezing objects and variables in PHP apps. Specifically he points out a few gotchas to watch out for.

PHP has different in-core callbacks able to help us with daily deployment, debug, improvements. At the same time, PHP is loads of intrinsic "gotcha", too often hard to understand, hard to explain, or simply hard to manage. One common problem is about debug, caching, or freezing, and the way we would like to debug, cache, or freeze, variables.

He presents the problem - serializing variable information to "freeze" it and how recursion can cause problems down the line. He looks at the two different kinds of recursion (recursion and recursion by reference) and, after looking at a few possible solutions to fix things, eventually comes down to a way to remove the recursion "without losing it".

Derick Rethans' Blog:
PHP's segmentation faults GDB-fu
Oct 08, 2008 @ 14:32:09

Derick Rethans has shared a quick tip for locating a code crashing kind of problem with your application when something like XDebug isn't around.

However, because we as PHP developers are lazy, provide a few GDB tricks to make this easier. First of all, it's only really going to work if you haven't stripped the symbols from your PHP and Apache binaries. Secondly, you still need to have the PHP source lying around somewhere.

He suggests using GDB to run the backtraces and create a file to help you track down the infinite recursion problem that could be giving you issues.

Debuggable Blog:
XPath on PHP Arrays (Set::extract)
Sep 26, 2008 @ 15:25:23

On the Debuggable blog there's an interesting post where Felix talks a bit about something I've seen requested quite a bit - a method for locating information in an array. His answer is an XPath-style query system to root out your custom information.

One of the requirements [of the original Set::extract method] was that the new method would need to be faster or at least as fast as the old implementation. My first attempts were big failures. Not only did the solutions I came up with contain tons of bugs. No, they were are also a lot slower the old extract function. A few benchmarks later and I discovered the biggest bottleneck in my implementation: Recursiveness.

He notes that no doing things recursively (not just in this situation, but ever) can help with a speed boost. In his example, a small change made all the differences and the XPath implementation in the CakePHP core makes grabbing information from any array simple.

While the implementation does not support full XPath (and probably won't in future), feel free to make suggestions on additional selectors or the idea in general.

Daniel Cousineau's Blog:
Displaying N-Deep Trees (Remember Your Algorithms Course?)
Aug 07, 2008 @ 17:03:23

On his Tower of Power blog Daniel Cousineau has written up a look at using a more detailed categorization method than just a parent/child relationship on your data - Tree Traversals.

If the software calls for only 2 levels of categorization (Parent and Child only), a simple nested for loop will suffice. However, software requirements change and you'll soon find yourself up shit creek without a paddle if you need to support 3 or 4 levels of nesting. [...] To those who's training is less formal (most web developers I meet have practical training, not formal), I'll help you out: Tree Traversals (or if you are completely lost, Recursion).

He creates a recursive function that, when passed in a category set with different types in it, can handle each of them and then calls itself again with the new child data. His sample code creates url out of a set of categories.

DevShed:
Developing a Discussion Forum in PHP with Recursion (Part 3)
May 15, 2006 @ 16:44:01

On DevShed today, they've posted this new tutorial continuing their "recursion in PHP" series - "Developing a Discussion Forum in PHP with Recursion".

After covering in detail how to define recursive method and functions, the question is: what comes next? Luckily, there's vast terrain to explore with reference to using recursion in PHP. As I said in previous articles of this series, recursion can be used in cases where a specific tree structure or a linked list needs to be navigated, in order to display, add, delete or edit its values. It's exactly for that reason that this last article will be focused on building an extensible discussion forum, which precisely uses a tree structure (implemented on a single MySQL database table) for displaying forum messages and adding new posts.

Using what they've taught in the first two parts of the series, they put it to good use, giving you a step-by-step guide to a simple recursive forum. They start with the database structure (always a good thing) and work out from there, creating the "ThreadProcessor" class and fetch functionality to grab the thread's contents. They also include a bit of functionality to create threads as well. It's not much more than that, so don't expect too much, but it is a great place to start.

DevShed:
Developing a Discussion Forum in PHP with Recursion (Part 3)
May 15, 2006 @ 16:44:01

On DevShed today, they've posted this new tutorial continuing their "recursion in PHP" series - "Developing a Discussion Forum in PHP with Recursion".

After covering in detail how to define recursive method and functions, the question is: what comes next? Luckily, there's vast terrain to explore with reference to using recursion in PHP. As I said in previous articles of this series, recursion can be used in cases where a specific tree structure or a linked list needs to be navigated, in order to display, add, delete or edit its values. It's exactly for that reason that this last article will be focused on building an extensible discussion forum, which precisely uses a tree structure (implemented on a single MySQL database table) for displaying forum messages and adding new posts.

Using what they've taught in the first two parts of the series, they put it to good use, giving you a step-by-step guide to a simple recursive forum. They start with the database structure (always a good thing) and work out from there, creating the "ThreadProcessor" class and fetch functionality to grab the thread's contents. They also include a bit of functionality to create threads as well. It's not much more than that, so don't expect too much, but it is a great place to start.