وبلاگ فيکسل برای گرافيست ها
SharpLife وبلاگ شخصی مهدی تقی زاده
بازگشت شاهو طوفانی
اين صداگذاری و ميکس آخرشه!
نکته جالبی در مورد تابع output_add_rewrite_var
کاراکتر های فارسی در عکس توسط PHP
مصاحبه من با مجله وزین IranAMP
واژه های فناوری اطلاعات و برابر های پیشنهادی فرهنگستان
دوره های آموزش IT
استانداردهای کدنويسی PHP
| صفحه قبل


IranPHP
نماينده رسمي سايت PHP.net

webilix
منبعي براي برنامه نويسان PHP

phprun
وبلاگي خواندني براي تمام PHP كارها

ם تعداد بازديدكنندگان
كل: 924773
ديروز: 915
امروز: 823
ם تعداد كاربران آنلاين
8 نفر
ם پنج مراجعه آخر
srkdrylt.hit.bg
blog.phpmystery.com
msedjhtf.keep.pl
pulse.yahoo.com
mycharmme.hit.bg
 
 
مشخصه ها و رفتارهای استاتيک
Static Methods اهمم... اولا يک عذرخواهی به خاطر دير به دير آپديت شدن اينجا؛ اين ماه گرفتاری بسی زياد است. اما می تونم قول مطالب توپ و جديد رو در آينده نزديک بدم. ثانيا مثل اينکه يک آدم بيکاری، اين وبلاگ رو در BlogRolling پينگ می کنه و جماعت وبگرد فکر می کنند اينجا خبريه و افسار مرورگرشون رو می کشند و به کلبه حقير سری می زنند. يه توصیه دوستانه به اين آقای بيکار؛ نکن آقا/خانم!
بريم سر اصل مطلب؛ امروز باز هم کمی به امکانات جدید شی گرايی در PHP 5 می پردازم.
از اين پس در PHP می توان متدها و Propertyهای يک کلاس را به صورت استاتيک تعريف کرد. يک متد استاتيک به جای وابستگی به يک نمونه از کلاس به خود کلاس وابسته بوده و محدوده عمل آن در سطح کليه نمونه های آن کلاس(Objectها) است. فراخوانی متدهای استاتيک با استفاده از سينتکس:

ClassName::method()

صورت می گيرد. داخل متدهای استاتيک، از this$ که معرف نمونه کلاس(آبجکت) است نمی توان استفاده کرد. چرا؟! چون همانطور که گفتيم متدهای استاتيک برای تمام نمونه کلاس ها يکسان و ثابت بوده و مقيد به آبجکت های ساخته شده نيستند.
حالا يک مشخصه(Property) استاتيک، يک متغيری در سطح کلاس است و مقيد به نمونه های آن کلاس نيست. يعنی تغيير در مقدار اين متغير، در تمام نمونه های گرفته شده از کلاس مذکور منعکس می شود. مشخصه های استاتيک را با کلمه کليدی static تعريف می کنيم و نحوه دسترسی به آن هم با سينتکس:

ClassName::$property

ميسر است. مثال زير، نحوه کار مشخصه های استاتيک را نشان می دهد:

<?php
class TestClass {
    public static 
$counter;
}
$counter TestClass::$counter;
?>

* کلمه کليدی Public به اين معنی هست که به طور مستقيم می توان به اين متغير دسترسی يافت.(در بحث Encapsulation و پنهان سازی داده ها از دید کاربر کلاس مطرح می شود)
گاهی اوقات پيش می آيد که بخواهيد از داخل خود کلاس به مشخصه استاتيک آن دسترسی بيابيد؛ برای اين منظور می توان از دو کلمه کليدی جادويی به نام های self و parent بهره برد. که به ترتيب به خود کلاس و والد کلاس اشاره می کنند. با بهره گیری از self و parent ديگر لازم نيست برای ارجاع به يک کلاس، از نام آن استفاده کنيد.در مثال پايين با يک مثال ساده نحوه استفاده از مشخصه های استاتيک و انتساب يک شناسه منحصر به فرد عددی به هر نمونه از کلاس شرح داده شده است:

<?php
class TestClass {
    public static 
$counter 0;
    public 
$id;
    public function 
__construct() 
    {
        
$this->id self::$counter++;
    }
}
?>


در PHP 4 چیزی به نام متدها و مشخصه های استاتيک نداريم؛ يعنی بهتر هست بگيم پشتيبانی صريحی از متدهای استاتيک به عمل نيامده است. اما با استفاده از سينتکس ()ClassName::function امکان فراخوانی متدی از کلاس وجود دارد. چنين متدی را می توان يک متد استاتيک در نظر گرفت، البته تا زمانی که به يک مشخصه از کلاس اشاره نکند.
من به شخصه برای تمام اپليکيشنهای تحت وبی که می نويسم يک کلاس کلی دارم به نام MainLib که توابع مورد نياز و مشترک بين ساير کلاس ها را در آن قرار داده ام، برای مثال متدی برای بررسی magic_quotes_gpc و تعيين خروجی، تابعی برای تبديل تاريخ شمسی به ميلادی و بالعکس، تابعی برای راه اندازی Template Engine و تفسير و جايگذاری مقادير، تابعی برای ايجاد Navigationهای دلخواه و ....
حال تمام کلاس های ديگر سايت که کار مختص به خود را انجام می دهند، فرزند اين کلاس اصلی هستند و استاتيک بودن متدهای کلاس اصلی، اين امکان را می دهد که از آنها در برنامه نويسی ماجولار هم بهره برد و صرفا منحصر به نمونه کلاس ها و آبجکت ها نباشد. با استفاده از الگوی طراحی Front Controller کلیه ماجول ها را از یک صفحه اصلی مشتق می کنم و با تکنیک توابع متغیر(پست پایین) ماجول های مورد نیاز را فراخوانی میکنم، در هر ماجول کلاس مربوطه نمونه گیری شده و تمام کارهایی که باید در آن ماجول انجام شود، در کلاس گنجانده می شود. من با اتخاذ چنين روشی در کدنويسی، خيلی راحت و دقيق بين کليت کلاس ها و ماجول های برنامه، يکپارچگی خاصی ايجاد می کنم و بدين ترتيب کار توسعه ديگر ملال آور نمی شود و باعث میشود من همچنان PHP را دوست بدارم! wink

 
نظرات شما(19)  
Variable Variables و Variable Functions
VV PHP از دو امکان بسيار مفيد به نام های Variable Variables(متغیرهای تغییرپذیر) و Variable Functions(توابع متغير) پشتيبانی می کند. ويژگی نخست به شما امکان می دهد تا از مقدار يک متغير به جای نام یک متغير استفاده کنيد. چرا shocked شديد؟! به مثال زير توجه کنيد:

<?php
$a 
100;
$b ‘a’;
echo $
$b;
?>

وقتی اسکريپت اجرا می شود و مفسر با عبارت b$$ مواجه می شود، ابتدا مقدار متغير b$ (که برابر رشته کاراکتر a است) را معلوم می کند. سپس عبارت جدید را دوباره ارزيابی می کند. عبارت جديد با جانشين شدن a به جای b$ برابر a$ می شود و بدين ترتيب مقدار متغير a$ که برابر ۱۰۰ می باشد، چاپ می شود.
خوب حتما پيش خودتون می گويید، اين امکان چه کاربردی داره؟
يک نمونه از کاربردهای اون که من ازش زياد استفاده می کنم، عمومی کردن متغيرهای SGAها هست. اين حالا يعنی چی؟ از وقتی دستورالعمل register_globals از نسخه ۴.۲.۰ پی اچ پی بصورت پيش فرض خاموش هست برای دسترسی به متغيرهای ارسال شده از طريق فرم، کوئری استرينگ، کوکی و متغيرهای محيطی و Session بايد از Super Global Arrays استفاده کنيم نظير POST_$. خوب فرض کنيد، يک فرم بلندبالا با تعداد زيادی فيلد داريد و می خواهيد يک اسکريپت برای پردازش اطلاعات وارد شده در فرم، بنويسيد. برای دسترسی به اين اطلاعات اين فرم بايد نام فيلد موردنظر را به عنوان شاخص در SGAای مثل POST_$ ذکر کنيد مثلا ['POST['name_$. خوب خداييش دردسره ديگه. اون دوره ای که دستورالعمل register_globals روشن بود را به خاطر بياوريد که صرفا با نوشتن متغیر name$ به مقدار اون دسترسی داشتیم، اما حسرت نخوريد! چون همين الان با تکه کد بسيار ساده زير بدون ريسک امنيتی که متوجه اين دستورالعمل بود، به سهولت می تونيم از نام المنتهای فرم HTML امون به جای نام متغيرها استفاده کنيم و همچين قشنگ Data ها رو هندل کنيم!(هندل به فتح ه)

<?php
foreach ($_POST as $key=>$value) {
  $
$key $value;
}

یافتن کاربردهای دیگه اون رو به عهده خودتون می گذارم. phpMystery فقط سرنخ می ده! wink
همين قضيه در مورد توابع هم صادقه. يعنی از مقدار يک متغير می توان به جای نام تابع استفاده کرد.

<?php
function odd_number ($x)
{
    echo 
"$x is odd";
}
function 
even_number ($x)
{
    echo 
"$x is even";
}
$n 15;
$a = ($n 'odd_number' 'even_number');
$a($n);
?>

در انتهای اين اسکريپت متغير a$ دارای يکی از دو مقدار odd_number يا even_number خواهد بود. عبارت (a($n$ مثل اين می مونه که يکی از دو تابع فوق را فراخوانی کرده و آرگومان n$ را به آنها ارسال کنيم.
حالا بیشتر کاربرد توابع متغير در استفاده از الگوی طراحی Front Controller هست که خوراکه منه!
متغيرهای تغييرپذير و توابع متغير بسيار باارزش و استفاده از آنها خيلی راحت است. اگرچه ممکنه که استفاده از اونها، باعث مبهم شدن اسکريپت اتون بشه، چرا که تنها در زمان اجراست که می فهميد چی به چی ميشه و فقط با نگاه کردن به کدتون نمی تونيد از صحت عملکرد اسکريپت اتون اطمينان حاصل کنيد. بنابراين زمانی از اونها استفاده کنيد که سودمندی اونها به مشکلات بالقوه ای که ممکنه با اون مواجه بشيد بچربه!
 
نظرات شما(5)  
چه خبر از PHP؟
حتما همه شما از انتشار PHP 5.0.0 و جزئيات اون کم و بيش مطلع هستيد. بعد از دو سال طرح ريزی و برنامه نويسی و يکسال هم دوره تست و خطايابی طاقت فرسا، PHP 5.0.0 به حقيقت پيوست. برای تجريه و کار با اين نسخه جديد کافيست به سايت php.net سرکی بکشيد و از اينجا فايلهای موردنياز را دانلود کنيد. اگر از ويندوز ۲۰۰۰ يا XP استفاده می کنيد و نمی خواهيد زحمت پيکربندی آپاچی و PHP رو بکشيد، پروژه WAMP آخرين نسخه PHP را همراه خود دارد و برای کاربران مبتدی که هنوز از نحوه پيکربندی صحيح سرويس دهنده وب آپاچی و مفسر PHP اطلاعی ندارند، بهترين نقطه شروع می باشد. با WAMP 5 از تمام قابليت های جديد PHP 5.0 می توانيد استفاده کنيد. افزودنی هايی هم در سايت اين برنامه خواهيد يافت که به شما اجازه می دهد PHP 4 را در کنار PHP 5 داشته باشيد و يا يک فرمان ساده، به نسخه دلخواه سوئيچ کنيد. ويرايش ۱.۱ اين برنامه، شامل نسخه 1.3.31 آپاچی، نسخه ۵ پی اچ پی، SQLitemanager برای مديريت پايگاه داده های SQLite، بانک اطلاعاتی سريع و قدرتمند و پايدار MySQL نسخه 4.0.18 و برنامه تحت وب PhpMyAdmin برای مديريت کامل MySQL می باشد. بنابراين شما هم اگر جز تازه واردين به عرصه برنامه نويسی وب کدباز هستيد و از طرفی مثل خود بنده وابسته به پلت فرم ويندوز، اين بسته کامل، نياز شما را برطرف خواهد کرد.
خبر بعدی اينکه به دنبال انتشار نسخه ۵ پی اچ پی، نسخه 4.3.8 هم به عنوان آخرين ويرايش از PHP 4 با رفع برخی مشکلات امنيتی، عرضه شده است.
در آخر هم بالاخره معلوم شد اتفاق مهمی که قرار بود در Zend بيفته چيه. از چند وقت پيش در صفحه اصلی سايت Zend وعده داده شد که قراره اتفاق مهمی در Zend بیفته و آخر معلوم شد این رخداد مهم افتتاح شعبه اصلی اون در آمريکا و در قلب Silicon Valley هست. شعبه اصلی آن قبلا در اسرائيل بود. در ضمن Zend با عرضه Zend Studio نسخه ۳.۵ و Zend Performance Suite نسخه ۴ دوباره توسعه دهندگان PHP را به سمت خود جلب کرده است.
ويرايش شده در سه شنبه، 6 مرداد 1383 ساعت 06:44
 
نظرات شما(7)  

 
 
نام: نيما شايافر
متولد: 7/7/1362
تحصيلات: دانشجو
شغل: طراح وب و برنامه نويس
وضعيت: آفلاين

ماهيانه
مرداد 86 (2)
خرداد 86 (1)
دي 84 (4)
آذر 84 (5)
مرداد 84 (1)
تير 84 (1)
ارديبهشت 84 (2)
دي 83 (1)
آذر 83 (2)
آبان 83 (2)
مهر 83 (4)
شهريور 83 (6)
مرداد 83 (3)
تير 83 (7)
خرداد 83 (7)
ارديبهشت 83 (8)
فروردين 83 (13)
اسفند 82 (12)

موضوعي






جستجوي پيشرفته

BlogRolling is currently inaccessible.
©2004, Design & Developed by: Nima Shayafar. All rights reserved.