۱۳۸۸ شهریور ۳۰, ۱۰:۴۰ ق.ظ
سلام
امروز هم با یه کلاس جدید اشنا شدم
اسمش رو گذاشتن سوپر پروکسی
البته تو داکیومنت ش گفته که این کلاس یه جور رفلکشن انجام میده و اعضای پروتکتت و پرایوت یه کلاس دیگه رو قابل استفاده در بیرون از کلاس می کنه. صرف نظر از مورد استفاده رفلکشن و.... خود موضوع برام جالب بود.
http://www.phpclasses.org/browse/file/28447.html
یک مورد استفاده ش رو هم من می زارم
نکته ی قشنگ کار تو کد نویسی ورودی متد استاتیکه (getInstance) که یکیش حتما باید آرایه باشه. ( البته نمونه ش رو قبلا در غالب کلاس دیده بودیم)
نکته ی دیگه کار شیوه استفاده بود که برنامه نویس استفاده کرده. اون یه جورایی اومده کلاس رو باز نگری کرده. با استفاده از ابزار های رفلکشن پی اچ پی اونو از نو پیاده کرده.
مرجع استفاده از این امکانات :
http://ir.php.net/manual/en/class.reflectionclass.php
که البته باید زودتر کار ترجمه ش رو انجام بدم و بزارمش تو ویکی
امروز هم با یه کلاس جدید اشنا شدم
اسمش رو گذاشتن سوپر پروکسی
البته تو داکیومنت ش گفته که این کلاس یه جور رفلکشن انجام میده و اعضای پروتکتت و پرایوت یه کلاس دیگه رو قابل استفاده در بیرون از کلاس می کنه. صرف نظر از مورد استفاده رفلکشن و.... خود موضوع برام جالب بود.
کد پیاچپی:
<?php
/**
* This Software is open source and is published under GPL3
*
* @author Mathias Krieck [email protected]
*/
/**
* Proxy class for accessing private and protected members and functions
*/
class SuperProxy
{
/**
* Returns a Proxy class of $sSuperClassName that allows access to protected and private functions and members
*
* @param string $sSuperClassName class name
* @param array $aParams constructor params
*
* @return object
*/
public static function getInstance( $sSuperClassName, array $aParams = array() )
{
$sClass = null;
$sProxyClassName = "{$sSuperClassName}SUPERPROXY";
if ( !class_exists( $sProxyClassName, false ) ) {
$oReflection = new ReflectionClass( $sSuperClassName );
$aClass = file( $oReflection->getFileName() );
$iStart = $oReflection->getStartLine() - 1;
$iEnd = $oReflection->getEndLine() - 1;
foreach ( $aClass as $iKey => $sValue ) {
if ( $iStart <= $iKey && $iKey <= $iEnd ) {
$sClass .= $sValue . PHP_EOL;
}
}
$sClass = str_replace( $sSuperClassName, $sProxyClassName, $sClass );
$sClass = preg_replace( '/(.*)(protected|private) (.*function|.*\$.*)/i', '$1public $3', $sClass );
eval( $sClass );
}
if ( !empty( $aParams ) ) {
$oClass = new ReflectionClass( $sProxyClassName );
$oInstance = $oClass->newInstanceArgs( $aParams );
} else {
$oInstance = new $sProxyClassName();
}
return $oInstance;
}
}
?>
یک مورد استفاده ش رو هم من می زارم
کد پیاچپی:
class TestReflection
{
private $VarPrivate="Test Reflection Private Var <BR>";
private function TestPrivateFunction()
{
echo $this->VarPrivate = "Changed In Private Function";
}
}
$ArrayConstructorInput = array();
$TestReflectionIns = SuperProxy::getInstance("TestReflection",$ArrayConstructorInput);
echo $TestReflectionIns->VarPrivate;
echo $TestReflectionIns->TestPrivateFunction();
نکته ی قشنگ کار تو کد نویسی ورودی متد استاتیکه (getInstance) که یکیش حتما باید آرایه باشه. ( البته نمونه ش رو قبلا در غالب کلاس دیده بودیم)
نکته ی دیگه کار شیوه استفاده بود که برنامه نویس استفاده کرده. اون یه جورایی اومده کلاس رو باز نگری کرده. با استفاده از ابزار های رفلکشن پی اچ پی اونو از نو پیاده کرده.
مرجع استفاده از این امکانات :
http://ir.php.net/manual/en/class.reflectionclass.php
که البته باید زودتر کار ترجمه ش رو انجام بدم و بزارمش تو ویکی

علم تاج افتخار دنیا و یادگار پس از مرگ است