On 5/26/2016 6:40 PM, Tom Worster wrote:
> On 5/26/16, 12:30 PM, "Fleshgrinder" <p...@fleshgrinder.com> wrote:
> 
>> The problem is a completely different one, how should the following code
>> behave?
>>
>>  class A {
>>
>>    public int $x;
>>
>>  }
>>
>>  (new A)->x;
>>
>> The property has no value assigned but it is being accessed. The current
>> PHP behavior is to simply initialize it with null. But this is
>> impossible according to the type definition.
>>
>> There are not many ways to handle this. I think we already had all of
>> them proposed:
>>
>> 0. Fatal error after __construct was called.
>> 1. Fatal error and abort.
>> 2. Initialize with appropriate type.
>> 3. Initialize with null.
> 
> Under another 5th option, the problem you state does not arise. Disallow
> "public int $x;". Under this option you may declare $x with type int and
> an initial value or you may declare $x without type but you may not
> declare $x with type (nullable or not) and undefined initial value.
> 
> Tom
> 

This would be a valid approach too, yes. I personally would be against
it because I do not want to initialize all my properties.

  class A {

    private int $x;

    public function getX() {
      if (empty($this->x)) {
        $this->x = 42;
      }
      return $this->x;
    }

  }

This would not yield an E_NOTICE because both isset() and empty() never
do. This allows the attentive programmers to keep up there coding
practices without the necessity to assign meaningless values everywhere.

  class A {

    /** -1 is invalid */
    public int $x = -1;

    /** 'INVALID' is invalid but empty string is allowed */
    public string $s = 'INVALID';

    /** Null byte is invalid but anything else is valid */
    public string $welcome_to_the_c_world = '\0';

  }

Not cool. :(

-- 
Richard "Fleshgrinder" Fussenegger

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to