> > one problem I have with this example is, that you usually (or at least > often) don't have a "$task" object here.
I get what you're saying, but you do have a $task object if you want to use the form-builder, because it relies on the object for state. The same is true for most frameworks, and not generally a problem, since you can just create a transient (throw-away) object - this generally works fine, and has the added benefit of being able to initialize object properties with defaults. (such as today's date on a calendar entry form) On Tue, Apr 30, 2013 at 7:50 PM, Sebastian Krebs <krebs....@gmail.com>wrote: > > > > 2013/5/1 Rasmus Schultz <ras...@mindplay.dk> > >> Any PHP dev who works with a mainstream framework does this daily, but the >> frameworks rely on strings for property-names. >> >> Take this example from the Symfony manual, for example: >> >> >> class Task >> { >> protected $task; >> >> protected $dueDate; >> >> public function getTask() >> { >> return $this->task; >> } >> public function setTask($task) >> { >> $this->task = $task; >> } >> >> public function getDueDate() >> { >> return $this->dueDate; >> } >> public function setDueDate(\DateTime $dueDate = null) >> { >> $this->dueDate = $dueDate; >> } >> } >> >> $form = $this->createFormBuilder($task) >> ->add('task', 'text') >> ->add('dueDate', 'date') >> ->getForm(); >> >> In this example, 'task' and 'dueDate' are property-references - except of >> course that, no, they're not - they're obviously just strings... rewriting >> this example to use a (fictive) form builder API with static >> property-references: >> >> $form = $this->createFormBuilder() >> ->add(^$task->task, 'text') >> ->add(^$task->dueDate, 'date') >> ->getForm(); >> > > One problem I have with this example is, that you usually (or at least > often) don't have a "$task" object here. > > > >> >> We now have static property-references, which means the codebase can be >> proofed using static analysis, which also means better IDE support with >> property auto-completion, inline documentation, and automatic refactoring >> for operations like renaming properties, etc. >> >> Note that $task need not be passed to createFormBuilder() anymore - >> instead, we can now use PropertyReference::getObject() inside the >> form-builder to obtain the instance. >> >> For that matter, we can now scrap the form-builder entirely and introduce >> a >> simple form-helper in the view instead: >> >> Task name: <?= $form->textInput(^$task->task) ?> >> Due Date: <?= $form->dateInput(^$task->dueDate) ?> >> >> This is even better, because we now have the same level of IDE support and >> static analysis for textInput() and dateInput() which were previously >> unchecked strings. >> >> Or even simpler: >> >> Task name: <?= $form->input(^$task->task) ?> >> Due Date: <?= $form->input(^$task->dueDate) ?> >> >> Using PropertyReference::getObject() and reflection inside the >> form-helper's input() method, we can now use property-annotations to >> specify the input-type. This is a matter of preference of course, but use >> of annotations in Symfony is pretty popular. >> >> This is just one example - most PHP devs (at least those who do PHP for a >> living) use form abstractions and object/relational-mappers of some sort, >> so this has practical applications for practically everyone, everywhere. >> >> Rasmus Lerdorf wrote: >> >> It is certainly not worth overloading the XOR operator for >> >> >> Are we really going to quibble about syntax? This adds nothing to this >> discussion. And as I explained earlier, the ^ operator is used for the >> sake >> of discussion only - if it's more practical to use another character for >> this operator, I don't care what it looks like. >> >> >> On Tue, Apr 30, 2013 at 4:58 PM, Stas Malyshev <smalys...@sugarcrm.com >> >wrote: >> >> > Hi! >> > >> > > I'm proposing we need a way to statically reference an object >> property - >> > > the object property itself, not it's value: >> > >> > You probably have use case for that, and it should be pretty easy to >> > write a class that does that, but why it should be in the language? It >> > certainly doesn't look like something sizeable portion of PHP devs would >> > do frequently. >> > >> > -- >> > Stanislav Malyshev, Software Architect >> > SugarCRM: http://www.sugarcrm.com/ >> > (408)454-6900 ext. 227 >> > >> > > > > -- > github.com/KingCrunch >