[eluser]skunkbad[/eluser]
[quote author="Crimp" date="1255875337"]If the constructor has "final" in front of it, it can't be overridden. It does not in CI. if the child does not have a constructor, the parent constructor is called. If the child does have a constructor, the parent constructor is not called and you have to explicity call parent::__construct(). Maybe there is something in the parent constructor that is missing? Have you made a simple test to see which method is actually called? It could be that the class extension works but the child methods return the wrong result.[/quote]
Yes, simple testing did reveal that the parent constructor is not being overridden by the child constructor.
I figured it out. The constructor of MY_Cart needs to be named MY_Cart, and not CI_Cart. It's not like one of the other methods, because its role in the class is different, and so putting the CI_Cart method in My_Cart just meant I had a standard method named CI_Cart there, and not a constructor to override the constructor in CI_Cart.
If CI was strictly php5, and __construct had been the constructor name for both parent and child, my understanding is that this would have never been an issue.
Crimp, thanks for your help.