> echo a()['q']; // isn't? because this is simply not valid syntax for the INTERPRETER PHP while this > echo o()->q; can be interpreted because of the design of the interpreter. I can live with that. ralph_deffke@xxxxxxxx "Tom Worster" <fsb@xxxxxxxxxx> wrote in message news:C6D13522.12422%fsb@xxxxxxxxxxxxx > On 9/12/09 9:50 AM, "Tom Worster" <fsb@xxxxxxxxxx> wrote: > > > On 9/12/09 1:32 AM, "Lars Torben Wilson" <torben@xxxxxxx> wrote: > > > >> Tom Worster wrote: > >>> if i have an expression that evaluates to an object, the return value from a > >>> function, say, and i only want the value of one of the objects properties, > >>> is there a tidy way to get it without setting another variable? > >>> > >>> to illustrate, here's something that doesn't work, but it would be > >>> convenient if it did: > >>> > >>> $o = array( (object) array('a'=>1), (object) array('a'=>2) ); > >>> > >>> if ( end($o)->a > 1 ) { // can't use -> like this! > >>> ... > >>> } > >> > >> What version of PHP are you using? Your example should work. > >> > >> Torben > > > > 5.2.9. > > > > what version does it work in? > > i shamefully beg your pardon, lars. i was sure i tested the example but it's > clear to me now i either didn't or i made a mistake. end($o)->a IS php > syntax! so -> may follow a function (or method, i guess) call. > > but let me give you a more different example: > > $a and $b are normally both objects, each with various members including a > prop q, but sometimes $a is false. i want the q of $a if $a isn't false, > otherwise that of $b. > > ($a ? $a : $b)->q // is not php, afaik > > before you suggest one, i know there are simple workarounds. > > but mine is a theoretical question about syntax, not a practical one. i'm > exploring php's syntactic constraints on the -> operator in contrast to, > say, the + or . operators. and in contrast to other languages. > > for example, the . in js seems more generally allowed than -> (or, for that > matter, []) in php. programmers (especially using jquery) are familiar with > using . after an expression that evaluates to an object, e.g. > > <body> > <p id="thepara" class="top x23 indent">My x class number is > <span id="num"></span></p> > <div id="mandatory" style="border: solid red 1px"></div> > <script type="text/javascript"> > document.getElementById('num').innerText = > ( ( document.getElementById('optional') > || document.getElementById('mandatory') > ).appendChild(document.getElementById('thepara')) > .className.match(/x(\d+)/) || [0,'absent'] > )[1] > </script> > </body> > > which shows . after objects, method calls and expressions (as well as the [] > operator applied to an expression). > > do we just live without in phpville or am i missing something? > > > and while i'm at it, and using my original error, how come... > > function o() { return (object) array('q'=>7); } > echo o()->q; // is ok syntax, but > > function a() { return array('q'=>5); } > echo a()['q']; // isn't? > > > -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php