Re: Extending SplDoublyLinkedList with specific child types and avoiding strict notices
| From: | Ryan Pallas | Date: | Mon, 20 Mar 2017 19:21:24 +0000 |
| Subject: | Re: Extending SplDoublyLinkedList with specific child types and avoiding strict notices | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-326025@lists.php.net to get a copy of this message | ||
I don't believe this is possible due to not being able to narrow type hints
for arguments in extended classes. However, you could just remove the
typehint, and check yourself, something like:
public class push($item)
{
if (!($item instanceof SpecificChildTypeClass::class))
throw new TypeError(sprintf(
'Argument 1 passed to %s::push() must be of the
type %s, %s given',
static::class,
SpecificChildTypeClass::class,
gettype($item) != 'object' ? gettype($item) :
get_class($item)
));
parent::push($item);
}
On Mon, Mar 20, 2017 at 12:57 PM, AshleySheridan <ash@ashleysheridan.co.uk>
wrote:
> Hopefully the title says it all. Basically I'm extending the
> SplDoublyLinkedList as it's better on memory than arrays, is object
> orientated, and it can be extended with additional functionality more
> easily. It's that last part that is causing some issues. I'm extending
> to create a list class that only takes specific children. This example
> will throw PHP strict notices when run, which I ideally want to avoid:
>
> <?php
> class SomeSpecificListClass extends \SplDoublyLinkedList
> {
> public class push(SpecificChildTypeClass $item)
> {
> parent::push($item);
> }
> }
>
> Has anyone else tried something like this before and found a better
> way?
>
>
> Thanks,
> Ash
>
> http://www.ashleysheridan.co.uk
>
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>