Bu gerçekten mümkündür.
PHPUnit_Framework_MockObject_Generator Modifiye
1 $myClass = unserialize(
2 sprintf(
3 'O:%d:"%s":0:{}',
4 strlen('MyClass'), 'MyClass'
5 )
6 );
Lütfen unutmayın, bu gibi bir kod PHPUnit böyle bir çerçeve içinde tüm iyi ve haklı. Eğer üretim kodunda bu gibi bir kod olması varsa Ama, büyük olasılıkla çok garip bir şey yapıyorsun.
Eğer bir açıklama istedi beri:
Eğer serialize an Object Eğer nesne bir dize temsilini olsun. Örneğin
echo serialize(new StdClass) // gives O:8:"stdClass":0:{}
O nesne anlamına gelmektedir. 8 sınıf adının dize uzunluğudur. "stdClass" sınıf adı açıkçası. Serileştirilmiş nesne 0 set özellikleri (more to that later), boş kaşlı ayraçlar ile gösterilir vardır. : sadece sınırlayıcılardır.
Her tefrika dize unserialize fonksiyonu ile orijinal "canlı" bir değer haline yeniden olabilir. Aksi takdirde, kurucu aşmak olacaktır. Charles doğru işaret gibi) seri hale getirilirken magic method __wakeup() will be called if it is defined (just like __sleep() çağrılır.
Hat 3 size sprintf (hat 2) ile kullanılmak üzere hazırlanmış bir dize bakın. Eğer sınıf adının dize uzunluğu %d olarak verilir ve sınıf adı %s olarak verilir görebilirsiniz. Bu bir rakam ve bir dizge olarak, ikinci olarak 4. satırda kendisine geçirilen ilk argümanı kullanmak gerekir sprintf'i anlatmaktır. Bu nedenle, sprintf aramanın sonucudur
'O:7:"MyClass":0:{}'
Eğer denetleyici yürütmesini olmadan örneğini istediğiniz sınıfın tefrika dize oluşturmak için istediğiniz sınıf adı ile 4. satırda "Sınıfım" hem tekrarlarını yerini alacak.
Bu dize daha sonra kurucu atlayarak, satır 1'de bir Sınıfım örneğine dizgilenmemiş edilir. Dizgilenmemiş örneği, tüm bu sınıfının yöntemlerini ve aynı zamanda herhangi bir özelliğe sahip olacaktır. Sınıfım de özellikleri var ise tefrika kukla dize farklı değerler eklemek sürece, bu, varsayılan değerlere sahip olacaktır.
Ve zaten bu. Bu konuda çok büyülü bir şey.