My first teaching experience was to teach 5th and 6th graders to program and Apple ][ in about 81, and then from 81 - 86 I owned a portion of a computer school in Irvine, CA and was the director of curriculum.
IME, the traditional methods of teaching programming are shit. It might mean something to a math major to start by coding the mean, median, mode and standard deviation of a set of numbers, but normal people want it (the computer) to
do something.
Back in those days, it was simple graphics routines - today, it's web pages. IMO, if you can hide from the the complexity of the server and the browser and simply get to the notion of Hello World using absolutely pure PHP ie.,
<?php
print 'Hello World';
?>
You'll get the notion of instructions down rather quickly. The first tough thing is always variables. Use the "bucket" analogy, andwork code that is extremely clean and clear and demonstrates how variables as simply repositories. Don't touch scope, global or anything like that yet.
The next toughy is functions - the notion that this one word "does something." Start with functions that are extremely well named and their action is simple - like trim() and str_pad() - stay away from things that are deep like date functions (which are deceptively complicated) as well as things that require knowledge of something else like DB or preg_ functiuons.
As soon as the most fundamental of concepts are established, go straight away to a first task - because everything is remembered better in the context of solving a problem (concrete experiental learning rather than logical-abstract memory).
Hope this helps - ping back if you want more of my drivel

/p