Hi,

On 05.09.2015 21:48, John LeSueur wrote:
Hi Ben,

Now that I have substantive questions, including the list :)

In the following:

class SomeList<Bar> {
     public static function fromArray<Baz>(array $a): SomeList<Baz> {
         $list = new SomeList<Baz>();
         $list2 = new SomeList<Bar>();
         return $list;
     }
}

$list = SomeList<int>::fromArray([1, 2]);

When fromArray() executes, what type is $list2? or is that an error? If
it's an error, what advantage is there to having distinct generic types
on the class vs. the method? How do I specify the two generic types I
want to use?

The $list2 line would definitely be an error, since the <Bar> hint is not known in the static context. The advantage is simply that you can pass a type through the a static method to create an object with a specific type for you.

Another thing I'd like to make sure I understand, how does this interact
with strict types (and non-strict)?

new Entry<int, string>(1, 2);//I assume it should type-juggle

declare(strict_types = 1);
new Entry<int, string>(1, 2);//I assume it should throw error

I didn't think too much about this, but I guess you are right that for scalar types, the strict_type declaration should apply in the user context.

I'm interested to see if PHP can get generics going. I hope hashing out
some more details might garner more interest.


Thanks,
John


--
Ben Scholzen
http://www.dasprids.de

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Reply via email to