Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.php > #6817

Re: json_decode problem

From Curtis Dyer <dyer85@gmail.com>
Newsgroups comp.lang.php
Subject Re: json_decode problem
Date 2012-08-20 10:41 +0000
Organization A noiseless patient Spider
Message-ID <k0t48i$8mk$1@dont-email.me> (permalink)
References <slrnk2avb8.be8.houghi@penne.houghi> <k055v2$62k$1@dont-email.me> <3488766.5KQix4pcSt@PointedEars.de>

Show all headers | View raw


Thomas 'PointedEars' Lahn <PointedEars@web.de> wrote:

> Gregor Kofler wrote:
> 
>> Am 2012-08-10 23:30, houghi meinte:

<snip>

>> foreach($p->lines as $l) {
>>    echo $l->stage;
>> 
>>    if(isset($l->quote)) {
>>      echo $l->quote;
>>    }
>> 
>>    if(isset($l->chars) {
>>      foreach($l->chars as $c) {
>>        echo $c->char;
>>        echo $c->nconst;
>>      }
>>    }
>> 
>>    ....
>> }
> 
> FYI: isset() should not be used with properties, because it
> fails with protected or private properties that have getters:
> 
> $ php -r 'class Foo { protected $_bar; public function
> __construct() { $this->_bar = 42; } public function __get($name)
> { return $this->_bar; } } $x = new Foo(); var_dump($x);
> var_dump($x->foo); var_dump(isset($x->foo));' object(Foo)#1 (1)
> { 
>   ["_bar":protected]=>
>   int(42)
> }
> int(42)
> bool(false)
> 
> I have run into this problem recently in an MVC-based commercial
> application that I had written, where I was accessing a template
> variable (implemented as item of a protected array property of
> the view class, accessed with $this->foo). Not using isset() in
> the template would have saved me hours of debugging. 
> property_exists() would not work either from public context then
> (it would always return FALSE).

According to the PHP documentation, as of PHP 5.3.0, 
`property_exists()' will also acknowledge protected and private 
properties. [1]

When using at least PHP 5.1.0, one might also consider PHP 
reflection to check for private and protected properties:

  <?php

  class Foo {
    private $test;
  }

  $r = new ReflectionObject(new Foo());
  var_dump($r->hasProperty('test')); /* bool(true) */

  ?>


<snip>

______
[1] <http://php.net/property_exists>

-- 
Curtis Dyer
<?$x='<?$x=%c%s%c;printf($x,39,$x,39);?>';printf($x,39,$x,39);?>

Back to comp.lang.php | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

json_decode problem houghi <houghi@houghi.org.invalid> - 2012-08-10 23:30 +0200
  Re: json_decode problem Gregor Kofler <usenet@gregorkofler.com> - 2012-08-11 10:43 +0200
    Re: json_decode problem houghi <houghi@houghi.org.invalid> - 2012-08-11 13:09 +0200
    Re: json_decode problem Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-08-12 13:44 +0200
      Re: json_decode problem Luuk <luuk@invalid.lan> - 2012-08-12 15:28 +0200
      Re: json_decode problem Luuk <luuk@invalid.lan> - 2012-08-12 15:32 +0200
      Re: json_decode problem Gregor Kofler <usenet@gregorkofler.com> - 2012-08-12 18:12 +0200
        Re: json_decode problem Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-08-12 23:30 +0200
      Re: json_decode problem Curtis Dyer <dyer85@gmail.com> - 2012-08-20 10:41 +0000
        Re: json_decode problem Jerry Stuckle <jstucklex@attglobal.net> - 2012-08-20 07:30 -0400
        Re: json_decode problem Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-08-20 16:45 +0200
  Re: json_decode problem houghi <houghi@houghi.org.invalid> - 2012-08-11 10:54 +0200
    Re: json_decode problem Luuk <luuk@invalid.lan> - 2012-08-11 11:05 +0200
      Re: json_decode problem houghi <houghi@houghi.org.invalid> - 2012-08-11 13:11 +0200

csiph-web