[DCOM-194] Creating Proxy class failure for own __get method Created: 22/May/13  Updated: 08/Sep/13  Resolved: 10/Jun/13

Status: Resolved
Project: Doctrine Common
Component/s: None
Affects Version/s: 2.4
Fix Version/s: 2.4

Type: Bug Priority: Critical
Reporter: Jan Pecek Assignee: Marco Pivetta
Resolution: Fixed Votes: 1
Labels: proxy
Environment:

using Nette framework ( http://nette.org ), PHP 5.4



 Description   

Nette framework (http://nette.org) has got own Nette\Object as a base of other objects. It also rewrite the default __get method in PHP object but it uses definition with pointer:

public function &__get($name)

Doctrine Common creates Proxy classes with __get method too but not with reference. It causes an error using strict warning:

Declaration of Proxy\__CG__\MyEntityObject::__get() should be compatible with & Nette\Object::__get($name)

The problem is in ProxyGenerator. Locally I've patched it in my Doctrine repository clone but don't know how to resolve it globally.



 Comments   
Comment by Marco Pivetta [ 22/May/13 ]

https://github.com/doctrine/common/blob/2.4.0-RC2/lib/Doctrine/Common/Proxy/ProxyGenerator.php#L386-L403 could be patched to verify if the method is byref/byval.

Comment by Christophe Coevoet [ 03/Jun/13 ]

This should probably be checked for all proxied methods, not only for magic ones

Comment by Marco Pivetta [ 03/Jun/13 ]

Christophe Coevoet I think I already check proxied methods, but didn't apply that logic for magic methods.

edit: indeed, there's a test for that: https://github.com/doctrine/common/blob/2.4.0-RC3/tests/Doctrine/Tests/Common/Proxy/LazyLoadableObject.php#L101-L106

Comment by Michael Moravec [ 06/Jun/13 ]

Hello, I've patched ProxyGenerator::generateMagicGet method to support reference, see Github PR #278.
Jan Pecek, could you confirm it fixes the problem?

Comment by Jan Pecek [ 06/Jun/13 ]

Michael Moravec: Yes, this is ok. Now, proxy classes are generated well.

Comment by Marco Pivetta [ 10/Jun/13 ]

Cleaned and re-submitted at https://github.com/doctrine/common/pull/281

Please review and then I'll merge.

Comment by Marco Pivetta [ 10/Jun/13 ]

Merged at https://github.com/doctrine/common/commit/d658ec7a03f6475eff0dd1eb940bdedd862e4b96

Generated at Sat Aug 30 04:17:58 UTC 2014 using JIRA 6.2.3#6260-sha1:63ef1d6dac3f4f4d7db4c1effd405ba38ccdc558.