First, figure out the goals for your project. Why are you doing it, who and how will users accomplish this? Get the general idea, and as you get more specific, jot some notes down. I love to have a white board by my desk to doodle some ideas.
Use UML (unified modeling language) to design your classes in a flowchart-style layout. There are special ways of doing this and there are programs which help you do this. See:
http://en.wikipedia.org/wiki/List_of_UML_tools - or, for rather simple projects, you can just use a whiteboard.
This one is highly notable:
http://bouml.free.fr/screenshots.html
Before you start coding, though, you need to, well, figure out your goals, then figure out what components you'll need to include.
This includes which functions should be able to be performed as a user would see it: "send email", "update address book", "add new contact", type of thing. Then, you need to plan out what pages users will see to do each of them, and describe the logic (PHP code) behind each page.
This is where UML comes in.
Discover classes by noticing which nouns you use to describe your application. Discover instance variables by associating them with adjectives. And verbs become actual methods (functions). And if you get really technical, adverbs are usually integrated with segments of code to do specific tasks (e.g. "partially update contact book [as opposed to all of it]").
Hope this helps.