The SitePoint Forums have moved.

You can now find them here.
This forum is now closed to new posts, but you can browse existing content.
You can find out more information about the move and how to open a new account (if necessary) here.
If you get stuck you can get support by emailing forums@sitepoint.com

If this is your first visit, be sure to
check out the FAQ by clicking the
link above. You may have to register
before you can post: click the register link above to proceed. To start viewing messages,
select the forum that you want to visit from the selection below.

It certainly mirrors the experience in several threads here (e.g. Container, DI and Persistence) where we started out very excited and eventually ground to a halt -- with a rich understanding of the subject, no doubt -- but frustrated that no clean, complete implementation was available.

That's the problem with PHP's "as simple as possible" philosophy. It makes the simple things easy, but the sophisticated things difficult or even impossible. In the case of finders, there are alternate solutions that are perfectly acceptable, or in the case of using a finder object, even preferable for some. But the amount of effort that people (including myself) have put into work arounds trying to make this work goes to show that the "correct" solution (in term of design principles) isn't always the most desirable.

But the amount of effort that people (including myself) have put into work arounds trying to make this work goes to show that the "correct" solution (in term of design principles) isn't always the most desirable.

I don't understand why the "'correct' solution isn't always the most desirable." Can you explain your thinking?

That's the problem with PHP's "as simple as possible" philosophy. It makes the simple things easy, but the sophisticated things difficult or even impossible.

In the webcast this guy keep talking about their principle of "extreme simplicity" - what kind of goal is that ? I mean, every sane developer tries to make the api as simple as possible. But complexity is relative to the context. Simple problems need simple solutions, complicated problems need complex solutions. If you use a simple solution to a complex problem, you're in trouble. If you use complex solution to a simple problem you're in trouble too, although of another kind. Perhaps what they meant is that they'll settle for the lowest common denominator. I guess "extreme simplicity" has a better sound to it.

In this case, I believe a finder object is objectively a superior solution, partially because retrieving multiple rows is a different responsibility than persisting an object, and because of the testing issues with static methods (which personally I'm not clear on, but I'm relatively new to unit testing). Therefore, from a design principles perspective, that would be the 'correct' solution. But a static finder method is more succinct, and given the choice between the two, that's what I'd pick, because it's simpler and therefore more pleasing to use. So to me it's the more desirable solution.

To me it's analogous to the whole static vs dynamic typing issue; common wisdom in the OOP world is (or at least was) that static typing is superior, but I find it a pain in the *** and it ultimately makes me less productive. And in the end, that's more important than strict adherence to design principles.

But complexity is relative to the context. Simple problems need simple solutions, complicated problems need complex solutions. If you use a simple solution to a complex problem, you're in trouble. If you use complex solution to a simple problem you're in trouble too, although of another kind.

The other aspect of "simplicity" is when you work with software written by a "real smart" person the simplicity (and beauty) of it are often very apparent -- and it is often simpler to use and change. Conversely, software written by a "regular" programmer more often envokes a "am I going to have to rewrite this whole thing!" response because the design is not thought through and flexible. So I guess what I am saying is that well designed software (e.g. Rails) provides the essence of "simplicity."

Originally Posted by kyberfabrikken

Perhaps what they meant is that they'll settle for the lowest common denominator. I guess extreme "simplicity sound" has a better sound to it.

They claim to be after solving the 20% of the problems that occur 80% of the time. The question is -- is there flexibilty built in to allow you to deal with another 60-70% of the problems faced?

But a static finder method is more succinct, and given the choice between the two, that's what I'd pick, because it's simpler and therefore more pleasing to use. So to me it's the more desirable solution.

What I have noticed, and has also been mentioned here by several people, is that static methods initially seem more desirable, but in the long run are not so desirable.

"extremely simple" or whatever the webcast was saying is all marketing talk, not technically talk. They are really trying to hype it up, and I must say their marketing department has done a fantastic job at gaining alot of attention and exposure to something that doesn't even exist.

This doesn't seem to have stopped you from providing feedback here. :-)

Originally Posted by Ren

Seems quite good thou Zend doing a framework, sometimes get the feeling alot of the PHP developers just develop the language, and do little in PHP itself. Probably an unfair comment, but does seem that way, when you hit some odd limitation you wonder why.

I think it's a fair comment, and this is why I think having a few of these people also contributing to the Zend Framework will ultimately help PHP. Jeff Moore elaborates on this idea here:

I get the sense that maybe one of the contributing companies had an ActiveRecord implementation that worked for them, so they got everyone excited. But when they actually tried to implement it without the constraints that the contributor had tolerated -- it is not working as well as planned.

I understand that you have to make some assumptions, since you can't try it for yourself yet, but does this really help? The framework is being written from the ground up.

The challenge that has been encountered with ZActiveRecord isn't impossible to solve, but keep in mind that the primary companies who have been pushing Zend to create this framework aren't likely to be running the very latest PHP release. Thus, Zend must provide a solution that works on existing PHP 5 versions, not just future ones.

Originally Posted by 33degrees

In any case, I find it amusing that they did the webcast using that syntax, while there is currently no way of implementing it in PHP5. Makes you wonder how much code they'd actually written at that point.

All of the libraries demonstrated had been written at that point.

Originally Posted by kyberfabrikken

In the webcast this guy keep talking about their principle of "extreme simplicity" - what kind of goal is that?

A very good one. PHP has an existing culture. Many of us have been working with PHP for nearly a decade, and we appreciate its simple and direct approach to solving problems. Any framework that's going to be successful cannot stray too far from this path.

If you want evidence, look at the number of PHP developers who dislike frameworks in general, prefer the procedural paradigm, never use PEAR, etc.

That's not true. I've worked with many, many developers, and the best ones always seem to come up with those simple, unimpressive solutions, regardless of the problem. You know, the type of solutions where you think, "Oh, that's easy," as soon as you see it. These are easy to test, easy to debug, easy to maintain, and tend to perform better than complex solutions.

The Zend Framework abides by this principle in a slightly different way. It's basically trying to do the hard stuff for you in much the same way that SimpleXML does. The idea is that the code you write will be very easy to debug and maintain, and any complexity is handled for you in the framework.

Originally Posted by arborint

The other aspect of "simplicity" is when you work with software written by a "real smart" person the simplicity (and beauty) of it are often very apparent -- and it is often simpler to use and change.

Exactly. :-)

Originally Posted by arborint

They claim to be after solving the 20% of the problems that occur 80% of the time. The question is -- is there flexibilty built in to allow you to deal with another 60-70% of the problems faced?

Yes.

Originally Posted by dreamscape

"extremely simple" or whatever the webcast was saying is all marketing talk, not technically talk.

You mean technical talk? How do you know this? I'll answer for you - you don't know. This is a blatant attempt to spread misinformation. Shame on you.

Extreme simplicity is a guiding principle in the development of the framework. It is similar to the "filter input, escape output" principle for web application security - a roadmap that can help guide you as you focus on the details. It serves the same purpose that a mission statement does for an organization.

Originally Posted by dreamscape

They are really trying to hype it up, and I must say their marketing department has done a fantastic job at gaining alot of attention and exposure to something that doesn't even exist.

It exists, so that part is wrong.

As for their marketing, I think you're too easily impressed. :-) It can't be that great, because I've missed it. I saw where they announced the framework at ZendCon, but that's about it. I can't even find the framework page from zend.com - I have to use a direct link to get there. (It's probably linked somehow, but it sure isn't easy to find.)

The challenge that has been encountered with ZActiveRecord isn't impossible to solve, but keep in mind that the primary companies who have been pushing Zend to create this framework aren't likely to be running the very latest PHP release. Thus, Zend must provide a solution that works on existing PHP 5 versions, not just future ones.

Yes, if they keep the static method syntax it'll be interesting exactly how they solve it. debug_backtrace() & parse the source seems the only 100 % PHP solution.

[The priciple of "extreme simplicity" is] A very good one. PHP has an existing culture. Many of us have been working with PHP for nearly a decade, and we appreciate its simple and direct approach to solving problems. Any framework that's going to be successful cannot stray too far from this path.
...
Extreme simplicity is a guiding principle in the development of the framework. It is similar to the "filter input, escape output" principle for web application security - a roadmap that can help guide you as you focus on the details. It serves the same purpose that a mission statement does for an organization.

How is that different from lowest common denominator ? Please understand that I'm not out to ridicule Zend by that statement (well perhaps a bit). If that is their aim, fine. But pretending that the simplest possible solution will always be the best, and that it can't cause trouble ahead with more complex applications is just naive.

That's not true. I've worked with many, many developers, and the best ones always seem to come up with those simple, unimpressive solutions, regardless of the problem. You know, the type of solutions where you think, "Oh, that's easy," as soon as you see it. These are easy to test, easy to debug, easy to maintain, and tend to perform better than complex solutions.

I didn't say overly complex. I said complex. I stand by that.

I take it that we could transcribe the catchy "extreme simplicity" to "go with the simplest possible solution". That's common sense.
The other edge of that sword however, is that an overly simplified solution may be getting in the way for a more sophisticated solution. I really think that flexibility is more important than simplicity, in a framework. Or at least that the ratio is different than with an application.

That may be true, but since nobody here has found or seen a way to make that particular example work in PHP5, you can't blame us from thinking that there may not be way of doing it without adding to the language itself, and so that there's actually no working code.

To be fair, Chris has stated on his blog that he is involved with the Zend Framework, and I would suspect there is probably some kind of an NDA in place until it goes public. So you can take it with a grain of salt, but you may be getting a little bit of "insider insight" from his comments.

Yes, if they keep the static method syntax it'll be interesting exactly how they solve it. debug_backtrace() & parse the source seems the only 100 % PHP solution.

I agree with your earlier prediction - that a change in PHP itself will be made, and an alternative syntax will be supported in order to cater to existing versions. Mike's public comments lend credibility to this prediction.

I seem to recall a bug in debug_backtrace() that made the following output myChild:

I can't remember when this was fixed, or if I'm just losing my mind. :-)

[Edited]

Originally Posted by kyberfabrikken

But pretending that the simplest possible solution will always be the best, and that it can't cause trouble ahead with more complex applications is just naive.

I don't think Zend has ever claimed that. Like I said, extreme simplicity is just a guiding principle.

Andi mentioned in the webcast that the framework achieves extreme simplicity in a number of ways, one of which is by not trying to solve every problem and by being flexible enough that PHP developers can still solve their more unique or complex problems themselves.

Originally Posted by kyberfabrikken

The other edge of that sword however, is that an overly simplified solution may be getting in the way for a more sophisticated solution. I really think that flexibility is more important than simplicity, in a framework.

I think these two characteristics can happily coexist. A simple solution only gets in the way when you try to use it to solve a problem it can't solve. Otherwise, it's just a few extra lines of code taking up space.

[Edited]

Originally Posted by 33degrees

That may be true, but since nobody here has found or seen a way to make that particular example work in PHP5, you can't blame us from thinking that there may not be way of doing it without adding to the language itself, and so that there's actually no working code.

Keep in mind that it's very easy to underestimate a group of people who come to a different conclusion than you by assuming that they haven't thought of something you have.

What is it that everyone is missing? The people who are commenting on the broken syntax are all people who have implemented ActiveRecord or other persistence libraries before (I'm currently on my fourth, but didn't even spot the problem).

There is a mysterious silence if there is an easy fix at hand.

I'm certainly curious about this incident, because it does give an insight in what's happening behind the scenes.

Originally Posted by shiflett

This doesn't seem to have stopped you from providing feedback here. :-)

It's only feedback if the framework authors read this stuff .

Originally Posted by shiflett

I understand that you have to make some assumptions, since you can't try it for yourself yet, but does this really help? The framework is being written from the ground up.

Given the complete lack of information, and the high number of framework authors on this forum, you would expect speculation to fly.

Who are the current authors? Is anything know about their previous experience with frameworks, etc.

Originally Posted by shiflett

All of the libraries demonstrated had been written at that point.

Now the plot really thickens. How did they get Joshua's example to work?

Originally Posted by shiflett

A very good one. PHP has an existing culture. Many of us have been working with PHP for nearly a decade, and we appreciate its simple and direct approach to solving problems. Any framework that's going to be successful cannot stray too far from this path.

I think "extreme simplicity" is going to have several meanings for different camps. I think PHP suffers from "extreme crudeness". Abstractions are rarely completed and very leaky.

This may be simple for the implementors, but is a whole bunch of extra complications for users. I'd like to think the phrase means lot's of effort to make the interface simple. Hibernate is very sophisticated, but it is clearly written with extreme simplicity as a goal.

JMock is currently having a lot of influence. I was fortunate enough to be sitting in the pub with the developers in the early stages. I saw Nat Pryce offer four designs, all with "easy to use" as the goal. From what I remember the final design was a mixture of two of them and emerged sometime later. A lot of refinement work was invested to achieve simplicity.

I'd like to see thsi approach take hold, and for us to stray from the old PHP path as much as possible quite frankly.

Originally Posted by shiflett

If you want evidence, look at the number of PHP developers who dislike frameworks in general, prefer the procedural paradigm, never use PEAR, etc.

I would count PEAR as the extreme antithesis of JMock.

Originally Posted by shiflett

It serves the same purpose that a mission statement does for an organization.

What I love about this phrase is that Zend have handed us a huge great brickbat to hit them over the head with . How many blogs are going to quote this phrase when some part of PHP gets overblown? RecursiveIteratorIterator anyone?

Originally Posted by shiflett

It exists, so that part is wrong.

So what's going on with the broken static stuff? Claiming a mysterious trick up their sleeve, and then failing to produce it, doesn't cut it. If this code works, what's the trick? If there is no trick, then it doesn't work? Please resolve the contradiction.

Originally Posted by shiflett

I hope this was helpful.

Not yet, but I'm looking forward to your response .

Any chance of comments on other aspects of the framework? Who's involved? How do people take part? Who's testing it? What were the influences?

I don't really know what all the noise is about; The framework isn't going to be published until it's complete. All this speculation isn't constructive, in fact it degrades the whole concept that Zend have gone to the trouble of developing the framework, even if needs must.

You will all just have to wait until it's released, so show some patience.

Marcus was perfectly civil and the points raised will continue this discussion. We do not remove posts just because they disagree with posts made by another member. Unfortunately, we are starting to take this thread off topic again, so lets leave this here.

I think "extreme simplicity" is going to have several meanings for different camps. I think PHP suffers from "extreme crudeness". Abstractions are rarely completed and very leaky.

This may be simple for the implementors, but is a whole bunch of extra complications for users. I'd like to think the phrase means lot's of effort to make the interface simple. Hibernate is very sophisticated, but it is clearly written with extreme simplicity as a goal.

The more I think about it, "Extreme Simplicity" is a really poor choice of motto. Nobody sets out to make their designs complex, and as Marcus points out, simplicity is inherent in good design. So at best, the motto is stating the obvious. At worst, it insinuates that other frameworks are too complex (and therefor badly designed) or that PHP users need a framework that's dumbed down.

It's obvious that that's not what they meant, but it does go to show how poor a choice of phrase it is.

Originally Posted by Dr Livingston

I don't really know what all the noise is about; The framework isn't going to be published until it's complete

I think the blame lies squarely on Zend for being so secretive about this project, and I think they have more to lose than to gain by doing so. Since there isn't a commercial incentive to keeping the source under wraps, one is led to think that maybe they have something to hide, or that they have a dim view of the common PHP programmer. Regardless of their reasons, I do think it shows a lack of understanding about how succesfull open-source projects work; Linux would definitely not be as ubiquitous as it is if Linus had kept the project to himself and some close collaborators until they felt all the bugs had been worked out.

I think the blame lies squarely on Zend for being so secretive about this project, and I think they have more to lose than to gain by doing so. Since there isn't a commercial incentive to keeping the source under wraps, one is led to think that maybe they have something to hide, or that they have a dim view of the common PHP programmer. Regardless of their reasons, I do think it shows a lack of understanding about how succesfull open-source projects work; Linux would definitely not be as ubiquitous as it is if Linus had kept the project to himself and some close collaborators until they felt all the bugs had been worked out.

On the points you've just made, I would have to agree with you completely; Though Zends framework is intended for the open source market, I still can't help but I get the feeling that there is to some extent, a commercial presence that resides behind the people who are backing Zend, in their endevour.

The secrecy of the framework, and therefore the lack of details may actually not lie at Zends door, if there are other parties that are involved, and that they have their say in the matter, or not. Anyway, there is nothing we can really do about it at the moment...

What is it that everyone is missing? The people who are commenting on the broken syntax are all people who have implemented ActiveRecord or other persistence libraries before (I'm currently on my fourth, but didn't even spot the problem).

I think you're getting the topics crossed up a bit. My reply was to the following:

Originally Posted by arborint

The desire for static calls is interesting. I know it has been discussed here that static calls are not that desireable. It makes me wonder how thoughtful the peer review is.

I see this type of statement on Slashdot all the time - one group of people assuming that those who come to a different conclusion have overlooked something obvious. It's certainly possible, but I don't think it's very common among software professionals.

Originally Posted by lastcraft

Given the complete lack of information, and the high number of framework authors on this forum, you would expect speculation to fly.

I do expect it, and I don't fault anyone for it, unless they try to present their speculation as fact in a deliberate attempt to spread misinformation.

Originally Posted by lastcraft

Who are the current authors? Is anything know about their previous experience with frameworks, etc.

From this list, you can see developers from 100 Days (a company whose entire business model revolves around a PHP framework), Ning (David Sklar), OmniTI (George Schlossnagle and Wez Furlong), and CRMs such as Jambo and SugarCRM.

Other blog posts indicate that Davey Shafik (author of Cerebral Cortex) and Paul Jones (author of Solar and Savant) are contributing.

Of course, there are the big companies like Zend and Oracle involved as well.

This may be simple for the implementors, but is a whole bunch of extra complications for users.

You have it reversed. The use cases are intended to be simple, and any necessary complexity is handled in the framework. Achieving extreme simplicity is not "simple for the implementors."

Originally Posted by lastcraft

I'd like to see thsi approach take hold, and for us to stray from the old PHP path as much as possible quite frankly.

Then you'll likely be disappointed with Zend's project. This is a company that caters to PHP developers who enjoy the "PHP way" of solving problems as simply and directly as possible. Although some Java development is migrating toward this approach (or migrating to an entirely different platform such as Ruby on Rails), I seriously doubt Zend is interested in making its framework stray too far from the status quo. Even if the "Java way" is better, it's not the approach that Zend's target audience prefers.

Most Java apologists I know blame all of the frameworks and related technologies for the problems in Java applications (unnecessary complexity, poor performance, lack of scalability, failed projects, etc.), so I think anyone implementing a PHP framework and wanting it to be widely adopted and successful needs to be careful when borrowing ideas from Java.

Originally Posted by lastcraft

How many blogs are going to quote this phrase when some part of PHP gets overblown? RecursiveIteratorIterator anyone?

Do you mean to be speaking about PHP or the Zend Framework?

I assume you mean the framework, and I agree, but that's part of the point. By making this goal of extreme simplicity public, Zend has essentially made a promise to the community. You can be sure that this looms over the head of everyone contributing to this project. :-)

Originally Posted by lastcraft

So what's going on with the broken static stuff? Claiming a mysterious trick up their sleeve, and then failing to produce it, doesn't cut it. If this code works, what's the trick? If there is no trick, then it doesn't work? Please resolve the contradiction.

There is no PHP trick, aside from some ugly hacks (some of which have already been mentioned). The code I posted earlier solves the problem a bit more elegantly, but it relies upon a bug in debug_backtrace() that has now been corrected, so it's no longer useful. :-)

Stated differently, there is no clean PHP solution. The only elegant way to solve this problem is with a C solution, a modification to PHP itself.

I think the blame lies squarely on Zend for being so secretive about this project, and I think they have more to lose than to gain by doing so.

Perhaps the problem is that they're not being secretive enough. If no one knew about the framework, all of this speculation and criticism wouldn't exist. They could be like Apple and only announce something after it had been completed.

Another perspective is that Zend's announcement at ZendCon is no different than many of Apple's announcements at WWDC. For example, Apple announced its Intel plans last year. They wanted developers to be ready. Zend announced its framework plans last year. They wanted developers to be ready.

Originally Posted by 33degrees

Regardless of their reasons, I do think it shows a lack of understanding about how succesfull open-source projects work; Linux would definitely not be as ubiquitous as it is if Linus had kept the project to himself and some close collaborators until they felt all the bugs had been worked out.

Linus gave us "release early, release often," but that doesn't mean he released Linux to the world before he was ready. There's also the fact that his project wasn't immediately popular - he still had very few contributors for the first year or two, and it took him more than two years to release 1.0. In other words, the conditions were entirely different.

Try to contribute a patch to the Linux kernel now, and see if you still think it's the best example to further your argument. The same goes for Apache, MySQL, Perl, and just about any other successful open source project.

In fact, PHP is known for having the most open development process of the major open source technologies, and this is often a source of criticism. This is the group of developers with which Zend is working, so I highly doubt they're blind to the advantages and disadvantages of their approach.

I see this type of statement on Slashdot all the time - one group of people assuming that those who come to a different conclusion have overlooked something obvious. It's certainly possible, but I don't think it's very common among software professionals.

This is the "every opinion is equally valid" argument in a different guise. Actually opinion tends to converge with experience. When I talk to 5+ year OO developers, they avoid statics. It's the newbies who like them.

The only exception here is Java, where the one public class per file forces static factories all over the place.

Originally Posted by shiflett

I do expect it, and I don't fault anyone for it, unless they try to present their speculation as fact in a deliberate attempt to spread misinformation.

I don't think anyone did that.

Originally Posted by shiflett

An early list of contributors is here:

All PHPers then, and no company with an obviously OO background. I think Jeff is spot on - Zend need to hire an industry heavyweight. The skills are not present in the PHP community. One world class developer will out-perform a team of average joes.

Yes I know they are some great C developers in that list, but we are talking cohesive OO frameworks. No one builds class libraries and multiple frameworks full time.

This sounds like it will be just another framework, well slightly better given this will be everyone's second go, but with the Zend logo. That may be a good thing in itself looking inward at the PHP community, but it won't complete witth Ruby and Java. I guess taht will happen on the next round.

Originally Posted by shiflett

Other blog posts indicate that Davey Shafik (author of Cerebral Cortex) and Paul Jones (author of Solar and Savant) are contributing.

Paul Jones, bless him, has only just learned unit testing.

There's another little problem. Rails was built on top of the Ruby class library. PHP doesn't even have a standard class library yet. Could we not have that first?

Originally Posted by shiflett

Of course, there are the big companies like Zend and Oracle involved as well.

Er...Zend? How are Oracle involved? Are they lending a framework guru? How are they helping? Again, you have peeked my interest.

Originally Posted by shiflett

You have it reversed. The use cases are intended to be simple, and any necessary complexity is handled in the framework. Achieving extreme simplicity is not "simple for the implementors."

I was talking about the PHP history you were referring to as an influence. I don't see sticking to the PHP way as a good thing, I see "extreme simplicity" as a very good thing and well overdue. "Extreme simplicity" and the "PHP way" are not the same thing. Not the same thing at all .

Originally Posted by shiflett

This is a company that caters to PHP developers who enjoy the "PHP way" of solving problems as simply and directly as possible.

You misread what I said. The current "PHP way" is a complete mess, with many half completed features and ad hoc bolt ons. The broken static behaviour is just one example where the PHPer had to work around the language limitations.

Yes please to "extreme simplicity". No thanks to everything, but the kitchen sink. I really hope this is a turning point.

Originally Posted by shiflett

Although some Java development is migrating toward this approach

The more experienced Java developers have been using this approach for sometime. Check out "Java Open Source Programming" (Walnes, et al) for a big list of "simple" tools. The Java crowd are still ahead of the curve on "extreme simplicity". Rails is just one project.

Originally Posted by shiflett

... so I think anyone implementing a PHP framework and wanting it to be widely adopted and successful needs to be careful when borrowing ideas from Java.

No one is suggesting copying Java. We don't have to copy Rails either.

Originally Posted by shiflett

Do you mean to be speaking about PHP or the Zend Framework?

The phrase came from the "powers that be", and it will be used to harass both. Hell, I'm gonna' have great fun .

Originally Posted by shiflett

There is no PHP trick, aside from some ugly hacks (some of which have already been mentioned). The code I posted earlier solves the problem a bit more elegantly, but it relies upon a bug in debug_backtrace() that has now been corrected, so it's no longer useful. :-)

Right, so the code is broken. That was the conclusion I was expecting.