ر این درس خواهیم خواند : - نحوه ساخت ، بارگذاری و اجرای یک فایل PHP - چگونه از PHP و HTML در یک صفحه استفاده کنیم - چگونه کدها را با استفاده از کامنتهای برنامه نویسی قابل فهم تر کنیم خوب برای شروع یک TextEditor رو باز کنید. php هم مانند html مبتنی بر متن ساده است بنابراین از هر ادیتوری میشود برای ساخت فایل php استفاده کرد. مثلا Notepad خود را باز کنید. خطوط زیر را وارد کنید و فایل را به هر اسمی با پسوند .php ذخیره کنید. مثلا first.php Code: 1: <? 2: print "Hello Web!"; 3: ?> در صورتیکه php روی کامپیوتر خود نصب کرده اید ، فایل رو در وب سرور خود کپی کنید و آن را از طریق browser صدا کنید. و یا اینکه فایل رو در یک سایت با دسترسی PHP بارگذاری نمایید و آدرس آن را در browser تایپ کنید. پس از اجرای فایل جمله Hello Web! رو بر روی صفحه خواهید دید. در صورتیکه کدها خود را یعنی هما چیزی که در ادیتور تایپ کردید رو روی صفحه دیدید. این بدان معنی است که وب سرور شما فایل php رو اجرا نکرده (یا php بر روی آن نصب نیست و یا پسوند فایل رو به درستی انتخاب نکرده اید.) خوب حالا که صفحه اول php خود را upload کرده اید کمی در آن دقت کنید. در شروع و در اولین خط کد Code: <? رو داريم. هميشه شروع يك كد php باید با همین تگ ها باشد. در غیر اینصورت سیستم با کدها مثل html رفتار میکند و بدون هیچگونه عملیاتی همان متن کد را نمایش خواهد داد. و در انتهای کد PHP نیز حتما باید Code: ?> را وارد کنید که به server می فهماند که کد php اینجا تمام شده است و از این به بعد با کدهای html روبرو است. در انتهای هر خط از کدها باید از Code: ; استفاده شود. در غیر اینصورت سرور کدها را در یک خط و پشت سر هم تشخیص می دهد. پس شما می توانستید کد بالا را در یک خط و به صورت Code: <? Print "Hello Word!" ; ?> نیز بنویسید.
آموزش Php - قسمت دوم - متغیرها در این درس می خوانیم : - درباره متغیرها ( متغیر چیست و چگونه از آن استفاده کنیم) - چگونه یک متغیر را تعریف کنیم و به مقدار آن دسترسی پیدا کنیم - برخی از علمگرهای متداول - چگونگی تعریف و استفاده از مقادیر ثابت متغیر نگهدارنده ویژه ایست برای مقادیر. هر متغیر دارای یک نام است که با علامت $ در اول آن مشخص می شود. نام یک متغیر می تواند شامل حروف ، اعداد و _ باشد. نام یک متغیر نمی تواند شامل space و یا کارکاترهای غیر حرفی باشد. کدهای زیر چند متغیر را تعریف می کنید : Code: $a; $a_longish_variable_name; $2453; $sleepyZZZZ</pre> توجه داشته باشید که ; در انتهای هر خط جزونام متغیر می باشد و در واقع نشان دهنده پایان جمله کد PHP است. برای مقدار دادن به متغیر کافیست که آن را مساوی با مقدارش قرار دهید. به طور معمول شما در یک دستور php متغیر را تعریف می کنید و به آن مقدار می دهید. مانند کدهای زیر : Code: $num1 = 8; $num2 = 23;</pre> وقتی که شما به ییک متغیر مقدار دادید می توانید دقیقا مانند یک کاراکتر با آن رفتار کنید. به طور مثال : Code: print $num1;</pre> دقیقا برابر با دستور Code: print 8;</pre> می باشد. نوع داده داخل متغیر DATA TYPE انواع مختلف اطلاعات در یک متغیر می تواند ذخیره شود که در طول برنامه می توانید رفتارهای متفاوتی با آن نماببد. برخی زبانهای برنامه نویسی شما را وادار می کنند که در ابتدا و در موقع تعریف متغیر نوع آن را نیز مشخص نمایید. ولی در PHP لزومی به این کار نیست و نوع اولین مقداری که وارد متغیر شود ، به عنوان نوع متغیر شناخته می شود. Type - Example - Description Integer - 5 - A whole number Double - 3.234 - A floating-point number String - "hello" - A collection of characters Boolean - true - One of the special values true or false آرایه و OBJECT جدول فوق انواع داده ها را نشان می دهد. شما می توانید از دستور gettype() برای مشاهده نوع یک متغیر استفاده کنید. به عنوان مثال : Code: 1: <html> 2: <head> 3: <title>Listing 4.3 Testing the type of a variable</title> 4: </head> 5: <body> 6: <?php 7: $testing = 5; 8: print gettype( $testing ); // integer 9: print "<br>"; 10: $testing = "five"; 11: print gettype( $testing ); // string 12: print("<br>"); 13: $testing = 5.0; 14: print gettype( $testing ); // double 15: print("<br>"); 16: $testing = true; 17: print gettype( $testing ); // boolean 18: print "<br>"; 19: ?> 20: </body> 21: </html></pre> کدهای بالا در خروجی جملات زیر را نشان خواهد داد : Code: integer string double boolean</pre> INTEGER یک عدد صحیح می باشد. به کلام ساده یک عدد بدون ممیز می باشد. STRING یک سری کاراکتر می باشد. وقتی در PHP با STRING کار می کنید باید حتما اطراف آن از " و یا ' استفاده شود. DOUBLE یک عددی است که ممیز نیز دارد. BOOLEAN یا TRUE است و یا FALSE. تغییر با استفاده از دستور settype() در PHP با استفاده از دستور settype() شما می توانید نوع یک متغیر را تغییر دهید. برای این کار باید نام متغیر و نوع متغیر که می خواهید به آن تغییر یابد را در بین پرانتز و با فاصله یک کاما در بینشان مشخص نمایید. به عنوان مثال : Code: 1: <html> 2: <head> 3: <title>Listing 4.5 Changing the type of a variable with settype()</title> 4: </head> 5: <body> 6: <?php 7: $undecided = 3.14; 8: print gettype( $undecided ); // double 9: print " -- $undecided<br>"; // 3.14 10: settype( $undecided, string ); 11: print gettype( $undecided ); // string 12: print " -- $undecided<br>"; // 3.14 13: settype( $undecided, integer ); 14: print gettype( $undecided ); // integer 15: print " -- $undecided<br>"; // 3 16: settype( $undecided, double ); 17: print gettype( $undecided ); // double 18: print " -- $undecided<br>"; // 3.0 19: settype( $undecided, boolean ); 20: print gettype( $undecided ); // boolean 21: print " -- $undecided<br>"; // 1 22: ?> 23: </body> 24: </html></pre> در هر دفعه تغییر متغیر ما با استفاده از دستور GETTYPE() نوع متغیر را چاپ می کنیم که از تغییر آن مطمئن شویم. همانطور که می بینید در خط 7 مقدار متغیر 3.14 است و به صورت DOUBLE و در خط 10 به STRING تبدیل می شود و در خط 13 به INTEGER تغییر می کند و به 3 تبدیل می شود. (یعنی رند می شود) و به همین صورت...... تغییر نوع داده بدون اینکه اصل متغیر تغییر کند با قرار دادن نام نوع داده Data Type در داخل پرانتز و قبل از نام متغیر یک کپی از متغیر با نوع داده جدید بدون تغییر دادن متغیر اصلی ایجاد می کند. به عنوان مثال : Code: 1: <html> 2: <head> 3: <title>Listing 4.6 Casting a variable</title> 4: </head> 5: <body> 6: <?php 7: $undecided = 3.14; 8: $holder = ( double ) $undecided; 9: print gettype( $holder ) ; // double 10: print " -- $holder<br>"; // 3.14 11: $holder = ( string ) $undecided; 12: print gettype( $holder ); // string 13: print " -- $holder<br>"; // 3.14 14: $holder = ( integer ) $undecided; 15: print gettype( $holder ); // integer 16: print " -- $holder<br>"; // 3 17: $holder = ( double ) $undecided; 18: print gettype( $holder ); // double 19: print " -- $holder<br>"; // 3.14 20: $holder = ( boolean ) $undecided; 21: print gettype( $holder ); // boolean 22: print " -- $holder<br>"; // 1 23: ?> 18: print gettype( $holder ); // double 19: print " -- $holder<br>"; // 3.14 20: $holder = ( boolean ) $undecided; 21: print gettype( $holder ); // boolean 22: print " -- $holder<br>"; // 1 23: ?></pre> در کد بالا هیچ وقت نوع متغیر اصلی را تغییر ندادیم بلکه مثلا در خط 14 در متغیر $holder مقدار Integer شده متغیر اصلی یعنی مقدار 3 را قرار دادیم در خط 16 آن را چاپ کردیم.
آموزش php - قسمت سوم - عملگرها عملگرها : در درس های قبلی یاد گرفتیم که مقدار به متغیر بدهیم و data type متغیر ها رو تغییر بدهیم. یک زبان برنامه نویسی تا وقتی که نتونیم به وسیله اون بر روی متغیرها عملیات ریاضی انجام بدیم در واقع به درد نمی خوره. عملگرها سمبول هایی هستند که به وسیله اون می تونیم با استفاده از چند مقدار ، مقدار جدیدی رو تولید کنیم. یک عملگر به عنوان مثال همون + است. 4 + 5 = 9 در اینجا ما از عملگر + استفاده کردیم تا با استفاده از دو مقدار 4 و 5 مقدار جدید 9 را تولید کنیم. عملگر مقدار ده یا همون ( = ) کارش اینه که مقدار سمت راست خودش رو توی متغیر سمت چپ می ریزه. PHP Code: <code style="white-space: nowrap;"> <code> print ( $name = "matt" ); </code> </code> دستور بالا کلمه matt رو چاپ می کند و همچنین متغیر name رو مساوی matt قرار می دهد. عملگرهای ریاضی : PHP Code: <code style="white-space: nowrap;"> <code> عملگر - نام - مثال - جواب + اضافه 3+5 8 - تفریق 3-10 7 / تقسیم 2/10 5 * ضرب 10*2 20 % قدرمطلق 3%10 1 </code> </code> عملگر پیوند دهنده یا همان ( . ) این عملگر وظیفه پیوند دادن متغیر های متنی رو دارد. به عنوان مثال : PHP Code: <code style="white-space: nowrap;"> <code> "hello"." world" returns "hello world" </code> </code> در php یک سری عملگرهای دیگه ای برای مقدار دهی دارد. += عملگری است که با استفاده از اون متغیر با خودش جمع می شود. مثلا PHP Code: <code style="white-space: nowrap;"> <code> $x = 4; $x += 4; // $x now equals 8 </code> </code> همچنین -= و /= نیز می توان استفاده نمود. PHP Code: <code style="white-space: nowrap;"> <code> $x = 4; $x -= 4; // $x now equals 1 </code> </code> عملگرهای مقایسه ای عملگرهای مقایسه ای بر روی متغیرها اعمال می شود و مقایسه می کند و در صورت درست بودن True و در صورت غلط بودن False بر می گرداند. مثلا PHP Code: <code style="white-space: nowrap;"> <code> $x < 5 </code> </code> اگر مقدار x مثلا 3 باشد این عملگر True رو برمی گرداند. مثلا == مقدار سمت راست و سمت چپ رو چک می کند. اگه مثلا ما x رو 4 قرار داده باشیم. PHP Code: <code style="white-space: nowrap;"> <code> $x == 5 </code> </code> مقدار False بر می گرداند. != چک می کند که مقدار سمت راست و چپ برابر نباشند و اگر x همان 4 باشد : PHP Code: <code style="white-space: nowrap;"> <code> $x =! 5 </code> </code> True را بر می گرداند. === چک می کند که مقدار چپ و راست برابر باشند و همچنین نوع دیتا آنها Data type آنها یکی باشد. علامت بزرگتر و کوچکتر و بزرگتر مساوی و کوچکتر مساوی نیز به همین صورت. عملگرهای منطقی اولین عملگر منطقی همان عملگر or (یا) می باشد. دیگر نشانه این عملگر || می باشد. مثلا PHP Code: <code style="white-space: nowrap;"> <code> true || false </code> </code> مقدار True را بر می گرداند. && فقط وقتی True برمی گرداند که هر دو طرف True باشند. مثلا PHP Code: <code style="white-space: nowrap;"> <code> ( $x > 2 ) && ( $x < 15 ) </code> </code> هنگامی مقدار True برمی گرداند که x بزرگتر از 2 و کوچکتر از 15 باشد. nload="NcodeImageResizer.createOn(this);" border="0"> در جدول بالا قسمت Bold شده تنها عملگری است که کمی جالب است. عملگر ++ و -- عملگر ++ یک عدد به متغیر اضافه می کند و -- یک متغیر از آن کم می کند. مثلا PHP Code: <code style="white-space: nowrap;"> <code> $x++; </code> </code> یکی به $x اضافه می کند. به عنوان مثال PHP Code: <code style="white-space: nowrap;"> <code> $x = 3; $x++ < 4; // true </code> </code> مقدار فوق True است. در مثال بالا همونطور که می بینید ابتدا عمل مقایسه انجام شده و بعد جمع صورت گرفته. حال : PHP Code: <code style="white-space: nowrap;"> <code> $x = 3; ++$x < 4; // false </code> </code> مقدار فوق False می باشد یعنی ابتدا جمع صورت گرفته و بعد مقایسه شده است. ترتیب اجرای عملگرها شاید همه شما این را بدانید ولی در php ترتیب اجرای عملگرها به صورت زیر می باشند : PHP Code: <code style="white-space: nowrap;"> <code> ++ − − (cast) / *% + − < <= => > == === != && || = += − = /= *=%= .= and xor or </code> </code> یعنی مثلا در PHP Code: <code style="white-space: nowrap;"> <code> 4 + 5 * 2 </code> </code> ابتدا 2 در 5 ضرب می شود و بعد با 4 جمع می شود. یعنی جواب مقدار فوق 14 می باشد. البته شما با گذاشتن پرانتز می توانید php را مجبور کنید که به صورت دلخواه شما عمل کند. مثلا PHP Code: <code style="white-space: nowrap;"> <code> (4+5) * 2 </code> </code> مقدار 18 را می دهد.
آموزش Php - قسمت پنجم - توابع آموزش Php - قسمت پنجم - توابع درس ششم توابع (Functions) توابع قلب یک کد درست طراحی شده است و باعث می شوند کدها خوانا تر شوند و بتوان دوباره از آنها استفاده نمود. هیچ پروژه بزرگی بدون استفاده از تابع نمی تواند انجام شود. در این درس می خوانیم : چگونه یک تابع را معرفی کنیم و از آن استفاده کنیم. چگونه مقدایر به تابع ارسال کنیم و از آنها مقادیر را بازخوانی کنیم. چگونه توابع با صورت داینامیک استفاده کنیم. چگونه به متغیرهای Global در توابع دسترسی پیدا کنیم. چگونه به یک تابع حافظه دهیم. تابع چیست ؟ شما می توانید تابع را یک ماشین در نظر بگیرید. یک ماشین مواد اولیه را از شما می گیرد و بر روی آنها عملیات از پیش تعیین شده را انجام می دهد و در نهایت به شما محصولی را می دهد. تابع مقادیر را از شما دریافت می کند ، بر روی آنها عملیات انجام می دهد و در نهایت کاری که می خواهید با آن انجام می دهد و نتیجه را برای شما بر می گرداند. اگر شما نیاز به درست کردن یک کیک داشته باشید مسلما خودتان آن را درست می کنید. ولی اگه 1000 کیک بخواهید درست کنید مطمئنا ماشینی طراحی می کنید که برای شما کیک درست کند. در موقع نوشتن تابع هم همیشه باید این مورد مدنظرتان باشد که طوری تابع را بنویسید که بتوان از آن بارها استفاده کرد. تابع در خود کدهایی را جای می دهد که شما هر وقت به آن نیاز دارید آن تابع را صدا می کنید مقادیر اولیه را به آن می دهید و تابع جواب را برای شما برمی گرداند. فراخوانی تابع دو مدل تابع وجود دارد. اولی توابعی هستند که درون خود php هستند و دیگری توابعی است که شما می نویسید. یکی از ابتدایی ترین توابعی که در خود php هستند تابع print است. PHP Code: <code style="white-space: nowrap;"> <code> print("Hello Web"); </code> </code> در جلو تمامی توابع حتما باید () پرانتزها باشند ، البته print یک استثنا است که بدون پرانتز هم کار می کند PHP Code: <code style="white-space: nowrap;"> <code> print(("Hello Web"); and print "Hello Web"; </code> </code> هر دو دستور بالا یک خروجی را می دهند ولی این مورد فقط در دستور print عملی است. در مثال بالا ما تابع print را صدا کردیم و مقدار "hello word" رو برای اون فرستادیم. حالا تابع وارد عمل می شود و این جمله را چاپ می کند. تابع شامل دو بخش است. اولی نام تابع Print در اینجا و دیگری مقادیری که برای تابع می فرستیم argument همان که در داخل پرانتز جلوی تابع آمده است. برخی توابع نیاز به چند Argument دارند که آنها را با کاما ، جدا می کنیم. مثلا : PHP Code: <code style="white-space: nowrap;"> <code> some_function( $an_argument, $another_argument ); </code> </code> بسیاری از توابع اطلاعاتی برای شما بر می گرداند در راستای عملی که انجام می دهند. مثلا در صورت درست بودن یا نبودن True یا Falseبر می گردانند. ABS() مثلا ، یک عدد را می گیرد و قدر مطلق آن را بر می گرداند. PHP Code: <code style="white-space: nowrap;"> <code> 1: <html> 2: <head> 3: <title>Listing 6.1</title> 4: </head> 5: <body> 6: <?php 7: $num = − 321; 8: $newnum = abs( $num ); 9: print $newnum; 10: // prints "321" 11: ?> 12: </body> 13: </html> </code> </code> در این مثال ما عدد -321 را به $num دادیم. این مقدار را به تابع abs فرستادیم در آنجا محاسبات لازم انجام شد و جواب برگردانده شد که ما آنرا در داخل $newnum ریختیم و آن را چاپ کردیم. البته ما می توانستیم کد را کمی جمع و جور تر بنویسیم و مستقیما عدد را به abs بدهیم و همانجا چاپ کنیم. PHP Code: <code style="white-space: nowrap;"> <code> print( abs( − 321 ) ); </code> </code> این یک خط کد همان کاری را می کند که در مثال قبل انجام دادیم. قوانین استفاده از توابعی که خودمان می نویسیم هم به همین شکل است. تعریف یک تابع شما می توانید تابع را با استفاده از دستور Function تعریف نمایید. PHP Code: <code style="white-space: nowrap;"> <code> function some_function( $argument1, $argument2 ) { // function code here } </code> </code> نام تابع درست بعد از دستور Function می آید و بلافاصله بعد از آن پرانتزها قرار می گیرند. اگر تابع شما Argument احتیاج دارد ، شما باید متغیرهای مورد نیاز را (که به وسیله کاما از هم جدا شده اند) را داخل پرانتز بنویسید. اگر تابع شما به Argument احتیاجی ندارد داخل پرانتز چیزی ننویسید. PHP Code: <code style="white-space: nowrap;"> <code> 1: <html> 2: <head> 3: <title>Listing 6.2</title> 4: </head> 5: <body> 6: <?php 7: function bighello() 8: { 9: print "<h1>HELLO!</h1>"; 10: } 11: bighello(); 12: ?> 13: </body> 14: </html> </code> </code> در خط 7 کد بالا ما تابع bighello را تعریف کردیم. مشخص است عملیاتی که این تابع انجام می دهد این است که کلمه Hello! را بین کدهای H1 چاپ خواهد نمود. ما تابع bighello را بدون Argument تعریف کردیم ، به همین دلیل داخل پرانتز چیزی ننوشتیم. PHP Code: <code style="white-space: nowrap;"> <code> 1: <html> 2: <head> 3: <title>Listing 6.3</title> 4: </head> 5: <body> 6: <?php 7: function printBR( $txt ) 8: { 9: print ("$txt<br>\n"); 10: } 11: printBR("This is a line"); 12: printBR("This is a new line"); 13: printBR("This is yet another line"); 14: ?> 15: </body> 16: </html> </code> </code> در مثال بالا ما تابع printBR را با Argument تعریف می کنیم. حالا در خطوط 11 و12 و 13 سه مقدار متفاوت را به تابع می فرستیم و مثلا سه خط چاپ شده در خروجی خواهیم داشت. $txt همانطور که می بینید در خط 7 تعریف شده است. موقعی که در خطوط 11 و 12 و13 ما تابع را صدا می کنیم $txt هر دفعه مقداری که برایش فرستاده شده است را به خود می گیرد و در خط 9 آن را چاپ می کند. هر مقدار که بخواهیم می توانیم این تابع را اجرا کنیم و خروجی بگیریم. توجه داشته باشید که اگر تابعی Argument نیاز داشته باشد ، موقع صدا کردن تابع باید حتما مقدار برای آن بفرستیم. نکته در صورتیکه تابع را به این صورت تعریف کنید : PHP Code: <code style="white-space: nowrap;"> <code> function printBR( $txt = "nothing") </code> </code> در این حالت $txt به صورت default مقدار "nothing" را دارد. یعنی اگر ما موقع صدا کردن تابع مقداری برای Argument نفرستیم تابع خودش مقدار Default را به $txt می دهد ولی اگر ما مقدار بفرستیم $txt برابر با مقدار فرستاده شده می باشد. مثلا : PHP: PrintBR();PrintBr("Hello");[LEFT] PHP Code: [LEFT]<code style="white-space: nowrap;"><code>[COLOR=#000000][COLOR=#0000BB]در خط اول کد بالا چاپ خواهد شد Nothing و در خط بعد چاپ می شود Hello [/COLOR][COLOR=#007700]. [/COLOR][COLOR=#0000BB]مقدار [/COLOR][COLOR=#007700]Default [/COLOR][COLOR=#0000BB]در برخی توابع بسیار کارا هستند[/COLOR][COLOR=#007700].[[/COLOR][COLOR=#0000BB]b[/COLOR][COLOR=#007700]] [/COLOR][COLOR=#0000BB]بازگرداندن مقادیر از توابع تعریف شده توسط کاربر [/COLOR][/COLOR]</code></code>[/LEFT][/LEFT]شما می توانید از داخل تابع با استفاده از دستور Return مقداری را برگردانید. دستور return عملیات تابع را متوقف می نماید و مقدار گفته شده را بر می گرداند.[LEFT] PHP Code: [LEFT]<code style="white-space: nowrap;"><code>[COLOR=#000000]1: <html>2: <head>3: <title>Listing 6.4</title>4: </head>5: <body>6: [COLOR=#0000BB]<?php7[/COLOR][COLOR=#007700]: function [/COLOR][COLOR=#0000BB]addNums[/COLOR][COLOR=#007700]( [/COLOR][COLOR=#0000BB]$firstnum[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]$secondnum[/COLOR][COLOR=#007700];[/COLOR][COLOR=#0000BB]8[/COLOR][COLOR=#007700]: {[/COLOR][COLOR=#0000BB]9[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000BB]$result [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]$firstnum [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]$secondnum [/COLOR][COLOR=#007700])[/COLOR][COLOR=#0000BB]10[/COLOR][COLOR=#007700]: return [/COLOR][COLOR=#0000BB]$result[/COLOR][COLOR=#007700];[/COLOR][COLOR=#0000BB]11[/COLOR][COLOR=#007700]: }[/COLOR][COLOR=#0000BB]12[/COLOR][COLOR=#007700]: print [/COLOR][COLOR=#0000BB]addNums[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]3[/COLOR][COLOR=#007700],[/COLOR][COLOR=#0000BB]5[/COLOR][COLOR=#007700]);[/COLOR][COLOR=#0000BB]13[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#FF8000]// will print "8"[/COLOR][COLOR=#0000BB]14[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000BB]?>[/COLOR]15: </body>16: </html>[/COLOR]</code></code>[/LEFT][/LEFT]کد بالا عدد 8 را در خروجی چاپ می کند. عددهای 3 و 5 در $firstnum and $secondnum ذخیره شدهند و بعد با هم جمع شدند. و جواب آنها در $result ذخیره شد و سپس در خط 10 آن مقدار برگردانده شده است. با دستور Return شما می توانید هر چیزی را برگردانید مثلا : [LEFT] PHP Code: [LEFT]<code style="white-space: nowrap;"><code>[COLOR=#000000][COLOR=#0000BB][/COLOR][COLOR=#007700]function [/COLOR][COLOR=#0000BB]addNums[/COLOR][COLOR=#007700]( [/COLOR][COLOR=#0000BB]$firstnum[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]$secondnum [/COLOR][COLOR=#007700]){return ( [/COLOR][COLOR=#0000BB]$firstnum [/COLOR][COLOR=#007700]+ [/COLOR][COLOR=#0000BB]$secondnum [/COLOR][COLOR=#007700]);} [/COLOR][COLOR=#0000BB][/COLOR][/COLOR]</code></code>[/LEFT][/LEFT]تابع بالا نیز دقیقا همان کاری را می کند که تابع قبلی می نمود. حتی می توانید به این صورت نیز از return استفاده کنید.[LEFT] PHP Code: [LEFT]<code style="white-space: nowrap;"><code>[COLOR=#000000][COLOR=#0000BB][/COLOR][COLOR=#007700]return [/COLOR][COLOR=#0000BB]4[/COLOR][COLOR=#007700]; [/COLOR][COLOR=#0000BB][/COLOR][/COLOR]</code></code>[/LEFT][/LEFT]می توانید نتیجه یک عملیات را برگردانید :[LEFT] PHP Code: [LEFT]<code style="white-space: nowrap;"><code>[COLOR=#000000][COLOR=#0000BB][/COLOR][COLOR=#007700]return ( [/COLOR][COLOR=#0000BB]$a[/COLOR][COLOR=#007700]/[/COLOR][COLOR=#0000BB]$b [/COLOR][COLOR=#007700]); [/COLOR][COLOR=#0000BB][/COLOR][/COLOR]</code></code>[/LEFT][/LEFT]یا حتی مقداری از یک تابع دیگر را برگردانید :[LEFT] PHP Code: [LEFT]<code style="white-space: nowrap;"><code>[COLOR=#000000][COLOR=#0000BB][/COLOR][COLOR=#007700]return ( [/COLOR][COLOR=#0000BB]another_function[/COLOR][COLOR=#007700]( [/COLOR][COLOR=#0000BB]$an_argument [/COLOR][COLOR=#007700]) ); [/COLOR][COLOR=#0000BB][/COLOR][/COLOR]</code></code>[/LEFT][/LEFT][B]صدا کردن یک Function به صورت داینامیک [/B]این امکان وجود داره که شما اسم تابع یک String یا یک متغیر بگذارید. و برای صدا کردنش از اون استفاده کنید. مثلا :[LEFT] PHP Code: [LEFT]<code style="white-space: nowrap;"><code>[COLOR=#000000]1: <html>2: <head>3: <title>Listing 6.5</title>4: </head>5: <body>6: [COLOR=#0000BB]<?php7[/COLOR][COLOR=#007700]: function [/COLOR][COLOR=#0000BB]sayHello[/COLOR][COLOR=#007700]()[/COLOR][COLOR=#0000BB]8[/COLOR][COLOR=#007700]: {[/COLOR][COLOR=#0000BB]9[/COLOR][COLOR=#007700]: print [/COLOR][COLOR=#DD0000]"hello<br>"[/COLOR][COLOR=#007700];[/COLOR][COLOR=#0000BB]10[/COLOR][COLOR=#007700]: }[/COLOR][COLOR=#0000BB]11[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000BB]$function_holder [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#DD0000]"sayHello"[/COLOR][COLOR=#007700];[/COLOR][COLOR=#0000BB]12[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000BB]$function_holder[/COLOR][COLOR=#007700]();[/COLOR][COLOR=#0000BB]13[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000BB]?>[/COLOR]14: </body>15: </html>[/COLOR]</code></code>[/LEFT][/LEFT]در مثال بالا در خط 7 تابع با اسم Sayhello تعریف شده و در خط 11 function_holder یک متغیری تعریف شده با مقدار sayHello حالا می توان از function_holder با اضافه پرانتزها برای صدا کردن تابع استفاده کرد.شاید این سوال پیش بیاد که چرا ما باید همچین چیزی رو لازم داشته باشیم. درمثال فوق عملا ما فقط کار خودمون رو زیادتر کردیم. ولی در واقع در برخی مواقع لازم داریم که جریان کد رو با توجه به مولفه های داخل url یا شرایط برنامه عوض کنیم.یعنی مثلا در شرایطی یک function اجرا شود و در شرایط دیگه function دیگری.[B]متغیر ها در داخل تابع [/B]مهم : متغیرهایی که داخل یک تابع تعریف می شوند ، فقط در داخل همون تابع قابل دسترسی هستند. یعنی اون متغیر ها بیرون تابع یا در تابع های دیگر در دسترس نیستند. در پروژهای بزرگ این امکان خیلی به شما کمک می کندچون شما می توانید از اسم های تکراری برای متغیرهایتان در تابع های مختلف استفاده کنید بدون اینکه دخالتی در یکدیگر داشته باشند.[LEFT] PHP Code: [LEFT]<code style="white-space: nowrap;"><code>[COLOR=#000000]1: <html>2: <head>3: <title>Listing 6.6</title>4: </head>5: <body>6: [COLOR=#0000BB]<?php7[/COLOR][COLOR=#007700]: function [/COLOR][COLOR=#0000BB]test[/COLOR][COLOR=#007700]()[/COLOR][COLOR=#0000BB]8[/COLOR][COLOR=#007700]: {[/COLOR][COLOR=#0000BB]9[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000BB]$testvariable [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#DD0000]"this is a test variable"[/COLOR][COLOR=#007700];[/COLOR][COLOR=#0000BB]10[/COLOR][COLOR=#007700]: }[/COLOR][COLOR=#0000BB]11[/COLOR][COLOR=#007700]: print [/COLOR][COLOR=#DD0000]"test variable: $testvariable<br>"[/COLOR][COLOR=#007700];[/COLOR][COLOR=#0000BB]12[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000BB]?>[/COLOR]13: </body>14: </html>[/COLOR]</code></code>[/LEFT][/LEFT]در مثال بالا خروجی چیزی رو چاپ نخواهد نمود. چون $testvariable که در خط 11 برای چاپ خوانده می شود قبلا تعریف نشده است و $testvariable خط 9فقط در داخل function قابل دسترسی هستند.[B]استفاده از متغیر به صورت Global (یعنی داخل و خارج تابع ها) [/B]به صورت Default متغیرهای تعریف شده بیرون یک تابع ،داخل تابع در دسترس نیست.مثلا در مثال زیر[LEFT] PHP Code: [LEFT]<code style="white-space: nowrap;"><code>[COLOR=#000000]1: <html>2: <head>3: <title>Listing 6.7</title>4: </head>5: <body>6: [COLOR=#0000BB]<?php7[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000BB]$life [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]42[/COLOR][COLOR=#007700];[/COLOR][COLOR=#0000BB]8[/COLOR][COLOR=#007700]: function [/COLOR][COLOR=#0000BB]meaningOfLife[/COLOR][COLOR=#007700]()[/COLOR][COLOR=#0000BB]9[/COLOR][COLOR=#007700]: {[/COLOR][COLOR=#0000BB]10[/COLOR][COLOR=#007700]: print [/COLOR][COLOR=#DD0000]"The meaning of life is $life<br>"[/COLOR][COLOR=#007700];[/COLOR][COLOR=#0000BB]11[/COLOR][COLOR=#007700]: }[/COLOR][COLOR=#0000BB]12[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000BB]meaningOfLife[/COLOR][COLOR=#007700]();[/COLOR][COLOR=#0000BB]13[/COLOR][COLOR=#007700]: [/COLOR][COLOR=#0000BB]?>[/COLOR]14: </body>15: </html>[/COLOR]</code></code>[/LEFT][/LEFT]خروجی خالی چاپ می شود و مقدار $life را چاپ نخواهد کرد. در برخی موارد ما نیاز به استفاده از متغیرهای بیرون تابع داخل یک تابع داریم. برایاین کار کافیه که از دستور Global استفاده کنیم.به طور مثال می توانید برای این منظور کد بالا را به صورت زیر بازنویسی کنیدر : [php]1: <html>2: <head>3: <title>Listing 6.8</title>4: </head>5: <body>6: <?php7: $life=42;8: function meaningOfLife()9: {10: global $life;11: print "The meaning of life is $life<br>";12: }13: meaningOfLife();14: ?>15: </body>16: </html>در خط 10 از دستور global $life; استفاده کردیم. در این حالت مقدار $life که بیرون تابع و در خط 7 تعریف شده در داخل تابع قابل دسترس می شود و خروجیاین کد The meaning of life is 42 چاپ خواهد شد.شما باید برای هر متغیری که می خواهید ازش در تابع استفاده کنید از این دستور استفاده کنید. و همچنین در هر تابعی که می خواهید از متغیری خارج از آن تابع استفاده کند باید از این دستور استفاده شود.[B]مهم : [/B]دقت کنید که اگه $life داخل تابع تغییر دهید مقدار $life در کل برنامه عوض می شود.
آموزش پی اچ پی - قسمت پنجم - جی دی آموزش پی اچ پی - قسمت پنجم- جی دی سلام ! nload="NcodeImageResizer.createOn(this);" border="0"> بعد از يک ماه تاخير بالاخره قسمت پنجم رو هم نوشتم ! nload="NcodeImageResizer.createOn(this);" border="0"> تو اين قسمت ميخواه در باره جي دي صحبت کنم و راه استفاده از اونو بگم ... nload="NcodeImageResizer.createOn(this);" border="0"> اول يه مقدار مقدمه ! nload="NcodeImageResizer.createOn(this);" border="0"> پي چ پي فقط به دادن خروجي متن محدود نيست شما ميتونيد عکس هاي متعددي با فرمت هاي متنوع با پي اچ پي خروجي داشته باشيد مثل PNG , GIF , JPG . WBMP , XPM و البته چندين فرمت ديگر که بايد پي اچ پي رو با اون ساطگاري بدين پي اچ پي ميتونه عکس رو مستقيم به سوي مرو گر هدايت کنه البته پي اچ پي به صورت پيش فرض اي ساخت عکس پشتيباني نميکنه که بايد آن را نصب کنيد ( GD ) البته اين کتابخانه ( library ) روي بيشتر سرور ها به صورت پيش فرض نصب هست ... اما اگر نصب نبود ميتوانيد اين را از GD Graphics Library دانلود و نصب کنيد و يا به مدير سرور خود بگوييد که آن را نصب کند ... در جيدي پشتيباني از PNG در نسخه 1.6 به بعد به وجود آمد و پشتيباني از GIF در نسخه -2.0.28 به وجود آمد يک مثال : PHP Code: <code style="white-space: nowrap;"> <code> <?php header("Content-type: image/png"); $string = $_GET['text']; $im = imagecreatefrompng("images/button1.png"); $orange = imagecolorallocate($im, 220, 210, 60); $px = (imagesx($im) - 7.5 * strlen($string)) / 2; imagestring($im, 3, $px, 9, $string, $orange); imagepng($im); imagedestroy($im); ?> </code> </code> براي استفاده از مثال بالا در صفحهات خود از اين دستور استاده کنيد : HTML Code: <img src="button.php?text=text"></pre> حالا اين مثال چيکار ميکنه ؟ مثال بالا ( button.php ) اول فايل images/button1.png رو باز ميکنه و بعد متغير TEXT رو روش مينويشه ( به صورت يک لايه جدا ) مثلا اگ شما دکمه هاي يکجور زيادي با متن متفاوت داريد ميتوانيد با استفاده از اين اسکيپت در وضا صرفه جويي کنيد و ديگر همه دکمه ها را در سايت آپلود نکنيد و به عبارتي دکمه به صورت ديناميکي ( dynamically ) ساخته ميشود در پايين ليست و نحوه استفاده تمامي توابع gd نوشته شده : gd_info دادن اطلاعات در باره نسخه و ديگر چيزهاي GD نصب شده : اين تابع خروجي از نسخه چي دي و فرمت هاي پشتيباني شده توسط جي دي و ... را به شما ميدهد : PHP Code: <code style="white-space: nowrap;"> <code> <?php print_r(gd_info()); ?> </code> </code> مثال بالا خروجي زير را بدنبال داره ( براي همه يکسان نيست ) Code: Array ( [GD Version] => bundled (2.0.28 compatible) [FreeType Support] => 1 [FreeType Linkage] => with freetype [T1Lib Support] => [GIF Read Support] => 1 [GIF Create Support] => 1 [JPG Support] => 1 [PNG Support] => 1 [WBMP Support] => 1 [XBM Support] => 1 [JIS-mapped Japanese Font Support] => )</pre> ------------------------------ getimagesize گرفتم اندازه عکس ( ابعاد) با استفاده از اين تابع ميتوان اندازه عکس رو به دست آورد مثلا 48*52 اين تابع از GIF, JPG, PNG, SWF, SWC, PSD, TIFF, BMP, IFF, JP2, JPX, JB2, JPC, XBM, or WBMP پشتيباني ميکند مثلا : PHP Code: <code style="white-space: nowrap;"> <code> <?php list($width, $height, $type, $attr) = getimagesize("img/flag.jpg"); echo "<img src=\"img/flag.jpg\" $attr alt=\"getimagesize() example\" />"; ?> </code> </code> در نسخه 4.0.5 به بعد از URL هم پشتيبانش شد : PHP Code: <code style="white-space: nowrap;"> <code> <?php $size = getimagesize("http://www.example.com/gifs/logo.gif"); ?> </code> </code> ------------------------------ image_type_to_extension گرفتن پسون عکس براي image type () روش استفاده : PHP Code: <code style="white-space: nowrap;"> <code> image_type_to_extension ( int imagetype [, bool include_dot] ) </code> </code> ----------------------------- image_type_to_mime_type گرفتن mime type يک عکس ( mime type در شناسوندن نوع عکس ( مثلا PNG ) به مرور گر کاربرد دارد البته در حاهاي ديگر هم کاربرد دارد ) مثال : PHP Code: <code style="white-space: nowrap;"> <code> <?php header("Content-type: " . image_type_to_mime_type(IMAGETYPE_PNG)); ?> </code> </code> اين تابع ميتواند حاوي يکي از خروجي هاي زير باشد : خروجي نوع عکس IMAGETYPE_GIF image/gif IMAGETYPE_JPEG image/jpeg IMAGETYPE_PNG image/png IMAGETYPE_SWF application/x-shockwave-flash IMAGETYPE_PSD image/psd IMAGETYPE_BMP image/bmp IMAGETYPE_TIFF_II(intel byte order) image/tiff IMAGETYPE_TIFF_MM (motorola byte order) image/tiff IMAGETYPE_JPC application/octet-stream IMAGETYPE_JP2 image/jp2 IMAGETYPE_JPX application/octet-stream IMAGETYPE_JB2 application/octet-stream IMAGETYPE_SWC application/x-shockwave-flash IMAGETYPE_IFF image/iff IMAGETYPE_WBMP image/vnd.wap.wbmp IMAGETYPE_XBM image/xbm توجه : اين تابع نيازي به کتابخانه جي دي ندارد nload="NcodeImageResizer.createOn(this);" border="0"> -------------------------------------- image2wbmp دادن خروجي به يک فايل يا مرور گر مثال : PHP Code: <code style="white-space: nowrap;"> <code> <?php $file = 'php.png'; $image = imagecreatefrompng($file); header('Content-type: ' . image_type_to_mime_type(IMAGETYPE_WBMP)); image2wbmp($image); // output the stream directly ?> </code> </code> لیست بقیه توابع رو بعدا میزارم ( حد اکثر تا هفتهی دیگر ...)
براي مثال : Array index value 0 Mehdi 1 Asef 2 tsotodeh 3 knowhow 4 carp بزاريد چندين مقدار رو در يك مقدار ديگر ذخيره كنيم : PHP Code: <code style="white-space: nowrap;"> <code> $users=array("Mehdi","Asef","tsotodeh","knowhow","carp"); </code> </code> در اينجا اگه بخواهيم مقدار Asef رو چاپ كنيم كافيه بنويسيم : PHP Code: <code style="white-space: nowrap;"> <code> Print "$users[1]"; </code> </code> و براي اضافه كردن آرايه جديد ميتونيم از دستور زير استفاده كنيم PHP Code: <code style="white-space: nowrap;"> <code> $users[]="azemati"; </code> </code> وبراي صدا كردن فقط انديس يا ايندكسش رو صدا بزنيم . در ضمن ميتونيم خودمون هم ايندكس گزاري كنيم يعني بجاي 0 – 1- 2 – 3 - .. .. خودمون حروف بزاريم براي مثال به كد زير توجه كنيد : PHP Code: <code style="white-space: nowrap;"> <code> $user = array (name=>"Asef",job=>"Programming",age=>24, "skill"=>"everyThing"); </code> </code> خوب حالا براحتي هركدوم رو كه بخواهيم ميتونيم صدا بزنيم : PHP Code: <code style="white-space: nowrap;"> <code> Print"$user[name]"; Or Print"$user[job]"; </code> </code> همونطور كه ديديد در قسمت تعريف كردن ارايه ها حروف را در داخل گيومه قرار ميديم و قرار دادن اعداد اجباري نيست و هم ميتونن داخل گيومه قرار بگيرن هم نگيرن . همچنين ميتونيم متغيير هاي داخل ارايمون رو مقدار دهي كنيم براي مثال : PHP Code: <code style="white-space: nowrap;"> <code> $user[name]="azemati"; $user[job]="webmaster"; </code> </code> و براي تعريف كردن چندين ارايه با چندين مقدار به اين صورت عمل ميكنيم : PHP Code: <code style="white-space: nowrap;"> <code> $user = array (array(name=>"Asef",job=>"Programming",age=>24, "skill"=>"everyThing"),array(name=>"mehdi",job=>"Programming",age=>18, "skill"=>"noThing"),array(name=>"daftarkhatereh",job=>"Programming",age=>24, "skill"=>"everyThing") ); </code> </code> و براي صدا كردن مقداري خاص به اين شكل عمل ميكنيم : PHP Code: <code style="white-space: nowrap;"> <code> print $user[0][job]; //Print "Programming" </code> </code> براي پي بردن به تعداد مقادير يك ارايه ميتوانيد از دستور Print count($user); استفاده كنيد . ولي دقت كنيد كه در دستور كانت مقدار ايندكس ما از صفر شروع نميشه بلكه از يك شروع ميشه براي مثال براي دسترسي به مقداري با استفاده از كانت به اين صورت عمل ميكنيم : PHP Code: <code style="white-space: nowrap;"> <code> <?php $users=array("a","b","c","d","e"); print $users[count($users)− 1]; //Print 5 ?> </code> </code> كه در اين كد اخرين مقدار يعني حرف اي را چاپ ميكنه ! ارايه ها را به شكل هاي گوناگوني ميتوان استفاده كرد و كاربرد بسيار زيادي دارند دستور ديگري كه ميخواهيم اشنا بشيم دستور Array_merge() هستش كه با مثالي اشنا ميشيم : PHP Code: <code style="white-space: nowrap;"> <code> <?php $first = array("a", "b", "c"); $second = array(1,2,3); $third = array_merge( $first, $second ); foreach ( $third as $val ) { print "$val<BR>"; } ?> </code> </code> در اين مثال ايم كد اين متغيير هاي اول و دوم را با هم تركيب ميكنه و در متغيير سوم قرار ميده اما دستور foreach مثل دستور for عمل ميكنه با اين تفاوت كه در اينجا مياد متغيير سوم رو در متغيير جديدي ميزاره و اون رو چاپ ميكنه شكل كلي اين دستور به اين صورت هستش : PHP Code: <code style="white-space: nowrap;"> <code> foreach( $array as $temp ) { //... } </code> </code> براي مرتب كردن يك ارايه از دستور sort استفاده ميكنيم مانند مثال PHP Code: <code style="white-space: nowrap;"> <code> <?php $an_array = array("x","a","f","c"); sort( $an_array); foreach ( $an_array as $var ) { print "$var<BR>"; } ?> </code> </code> بديهي است كه با اعداد هم ميتوانيم همچين كاري رو بكنيم همونطور كه ديديد با دستور sort(); ميتونيم مقادي يك ارايه رو مرتب كنيم. در مثال بالا در خروجي حروف به صورت مرتب شده نمايش داده ميشوند . دستور asort(); هم داريم كه بر اساس مقادير ارايه ها انها را مرتب ميكنه باز به مثالي ديگر توجه كنيد : PHP Code: <code style="white-space: nowrap;"> <code> <?php $first = array("first"=>5,"second"=>2,"third"=>1); asort( $first ); foreach ( $first as $key => $val ) { print "$key = $val<BR>"; } ?> </code> </code> كه در خروجي اين چنين چاپ ميشود : third = 1 second = 2 first = 5 در دستور بالا همونطور كه ديد بر حسب مقادير مرتب شد ولي اگر بخواهيم بر حسب ايندكسي كه ميدهم مرتب بشه ميتونيم از دستور ksort(); استفاده كنيم PHP Code: <code style="white-space: nowrap;"> <code> <?php $first = array("x"=>5,"a"=>2,"f"=>1); ksort( $first ); foreach ( $first as $key => $val ) { print "$key = $val<BR>"; } ?> </code> </code> كه در خروجي چاپ ميكنه a = 2 f = 1 x = 5 اين بخش نيز به پايان رسيد
آموزش پي اچ پي (كلاس ها) قسمت هفتم ابجكت ها : ابجكت چيست ؟ مجموعه اي از متغييرها و توابع است كه از يك الگوي خاص به نام كلاس ساخته شده اند . اما كلاس ها چي هستن ؟ فرض كنيد ما يك شركت داريم كه اين شركت از بخش هاي مختلفي تشكيل شده است حال ما در هربخش احتياج داريم كه هر ماه يك گزارش مالي بگيريم ! ما اينجا دو كار ميتونيم بكنيم هم ميتونيم براي هربخش چند نفر بزاريم و انها گزارش مالي را تهيه كنند و هر ماه تحويل دهند در اين صورت در هربخش شلوغي و همچنين كارمند بيشتري نيازمنديم ! راه ديگر اينست كه يك قسمت به عنوان اتاق گزارش مالي درست كنيم و هر بخش داده هاي خود را به اين قسمت بدهيم و گزارش مالي خود را دريافت كنيم در اين روش هم بخش ها منظم تر خواهند بود و هم ديگر احتياج به كارمند اضافي نداريم . در اينجا ابجكتها نقش كارمند در بخش گزارش مالي را بر عهده دارند فكر ميكنم مفهوم كلاس را درك كرده باشيد . بزاريد شكل كلي يك كلاس را برايتان نشان دهم PHP Code: <code style="white-space: nowrap;"> <code> Class First_class { //اين شكل كلي از يك كلاس هستش } </code> </code> پروپرتي ها: آبجكتها به متغيير هاي خاصي دسترسي دارند كه به آنها پروپرتي ميگويند اين پروپرتي ها ميتونند در هرجاي بدنه كلاس باشند اما براي اينكه كد مون مرتب باشه بهتره كه در بالاي كلاس تعريف بشن. بگزاريد با مثالي ديگر بيشتر توضيح بدم : PHP Code: <code style="white-space: nowrap;"> <code> Class f_class { var $name="mehdi"; } $obj1=new f_class(); $obj2=new f_class(); $obj1->name="Ali"; print "$obj1->name<br>"; print"$obj2->name<br>"; </code> </code> ديديم كه براي اختصاص دادن يك كلاس به يك متغيير اينگونه عمل كرديم PHP Code: <code style="white-space: nowrap;"> <code> $obj1=new f_class(); </code> </code> علامت <- به شما اجازه ميده تا به متغيير هاي درون يك كلاس دسترسي داشته باشيد و اونها رو تغيير بديد همونطور كه در كد ميبينيد ما در خط ششم متغيير name در ابجكت يك رو مساوي علي قرار داديم كه باعث عوض شدن متغيير ميشه همچنين براي چاپ خروجي نيز به همين صورت عمل كرديم ولي بدون علامت مساوي PHP Code: <code style="white-space: nowrap;"> <code> Print " $obj1->name "; </code> </code> متد ها : متدها در واقع توابعي هستند كه داخل يك كلاس وجود دارند بزاريد با يك مثال واضح تر بيان كنم : PHP Code: <code style="white-space: nowrap;"> <code> class f_class { var $name; function sayHello() { Print "Hello World"; } } $obj1=new f_class(); $obj1->sayHello(); // Hello World چاپ ميشود </code> </code> همونطور كه ميبينيد يك متد خيلي شبيه به تابع معمولي هستش با اين تفاوت كه متد هميشه داخل كلاس تعريف ميشه در ضمن شما ميتونيد با علامت <- يك متد ابجكت را صدا بزنيد مهمتر اينكه متدها به اعضاي متغيير هاي يك كلاس دسترسي دارند شما همين الان ديديد كه چطوري به يك پروپرتي از خارج يك آبجكت دسترسي پيدا كنيم اما چطوري يك آبجكت ميتونه خودشو به اصطلاح Return كنه : PHP Code: <code style="white-space: nowrap;"> <code> class f_class { var $name="mehdi"; function sayHello() { Print "Hello My names $this->name<br>"; } } $obj1=new f_class(); $obj1->sayHello(); // Hello My names mehdi چاپ ميكنه </code> </code> يك عبارت مخصوص رو بكار برديم به اسم this$ تا كلاس به آبجكت كنوني Return بشه شما با تركيب اين عبارت با علامت <- ميتونيد داخل يك كلاس به هر پروپرتي و متدي كه بخواهيد دسترسي داشته باشيد حالا اگه بخواهيم به پروپرتي name در همه آبجكت هاي كلاسمون مقدار خاصي بديم ميتونيم به اين صورت عمل كنيم : PHP Code: <code style="white-space: nowrap;"> <code> class f_class { var $name="mehdi"; function setName($n){ $this->name=$n; } function sayHello() { Print "Hello My names $this->name<br>"; } } $obj1=new f_class(); $obj1->setName("Ali"); $obj1->sayHello(); // Hello My names Ali چاپ ميكنه </code> </code> همونطور كه ديديد اومديم يه تابع تعريف كرديم كه اسم رو بتونيم همه جا تغيير بديم واز دستورthis براي عوض كردنش داخل كلاس استفاده كرديم. در ابتدا اسم ما مهدي بود ولي بعد از اينكه تابع عوض كردن اسم رو بكار برديم متد صدا زده شد و اسم تغيير كرد كد بالا رو ميتونستيم بصورت ساده تر وكمي پيچيده تر هم بنويسيم : PHP Code: <code style="white-space: nowrap;"> <code> class first_class { var $name; function first_class( $n="mehdi" ) { $this->name = $n; } function sayHello() { print "hello my name is $this->name<BR>"; } } $obj1 = new first_class("َAli"); $obj2 = new first_class("Asef"); $obj1->sayHello(); // hello my name is Ali چاپ ميكنه $obj2->sayHello(); // hello my name is Asef چاپ ميكنه </code> </code> همونطور كه ديديد اومديم و يه متد يا تابع با همون اسم كلاس خودمون ساختيم و مقدار ديفالتش رو روي مهدي گزاشتيم كه اگر هيچي وارد نشد اين عبارت چاپ بشه حالا در پايين در خط دهم و يازدهم هنگامي كه ابجكت يك و ابجكت دو رو به كلاس ها اختصاص ميديم همون موقع هم مقدار اسم رو عوض ميكنيم و مشكلي پيش نمياد كلاسمون هنگامي كه متد صدا زده ميشه خود به خود صدا زده ميشه. حال بزاريد با عبارت ديگري به اسم extends اشنا بشيم اين عبارت به اين معني ارث بردن است به اين مثال توجه كنيد : PHP Code: <code style="white-space: nowrap;"> <code> class first_class{ var $name = "mehdi"; function first_class( $n ) { $this->name = $n; } function sayHello(){ print "Hello my name is $this->name<br>"; } } class second_class extends first_class { } $test = new second_class("son of mehdi"); $test->sayHello(); // outputs "Hello my name is son of mehdi" </code> </code> همونطور كه ميبينيد ما كلاس دو رو تنظيم كرديم تا از كلاس يك ارث بري كنه وهمه متد هاي كلاس يك را خواهد داشت ما ميتونيم اينجا داخل كلاس دو يك تابع با اسم sayHello بسازيم و بگيم عبارت I dont know my name رو چاپ كنه در اينصورت اگه حتي در خط 12 ام ما يك عبارت براي تعويض اسم بديم تاثيري نميكنه و همون عبارت I dont know my name رو چاپ ميكنه راه ديگري هم هست و اون چاپ هردو كلاس باهم هست : PHP Code: <code style="white-space: nowrap;"> <code> class first_class { var $name = "harry"; function first_class( $n ) { $this->name = $n; } function sayHello() { print "Hello my name is $this->name<br>"; } } class second_class extends first_class { function sayHello() { print "I'm not going to tell you my name -- "; first_class::sayHello(); } } $test = new second_class("son of harry"); $test->sayHello(); // "I'm not going to tell you my name -- Hello my name is son of harry" چاپ ميكنه </code> </code> همونطور كه ميبينيد دستور ( متد:: وارث ) ما ميتونيم هر متدي رو كه ما تغييرش داديم دوباره صدا بزنيم چون در كلاس دو ما متد sayHello رو تغيير داديم با اين دستور اونو دوباره برگردونديم . خوب اين درس هم تموم شد احتمالا بعضي اشكالات هم داره كه با كمك شما رفع ميشه درضمن من بسياري از مثال هاي خود كتاب رو نياوردم چون بسيار گيج كننده بود حتا خودمم بهشون نگاه نكردم
آموزش پي اچ پي (فرم ها) – قسمت هشتم كار كردن با فرم ها خوب در اين قسمت ميخواهيم ببينيم چجوري با استفاده از فرمها اطلاعات رو بين صفحات ارسال كنيم. خوب يه مثال ساده ولي پركاربرد : PHP Code: <code style="white-space: nowrap;"> <code> #this page name is a.php <form action="b.php" method="get"> <input type="text" name="user"> <input type="submit" name="btn"> </form> </code> </code> قصد داريم اطلاعات يك تكست باكس رو كه در اين صفحه قرار داره توسط صفحه دوم به اسم b.php بخونيم پس اسم اين صفحه رو كه هيچ كد پي اچ پي توش استفاده نكرديم ميزاريم a.php و ذخيره ميكنيم. حالا ميرسيم به صفحه دوم اين كد رو تو صفحه دوم قرار بديد . <?php print "$user" ?> خيلي ساده و به اين صورت اطلاعات رو ميگيريم يوزر اسم تكست باكسي هست كه تو فرم اول قرار داشت. بقيه كد ها هم اچ تي ام هست و نيازي به توضيح نيست فقط در مورد get بگم كه اين دستور متغيير ها رو موقع ارسال تو ادرس نشون داده ميشه و شايد بعضي جاها زياد راه مطمئني نباشه ولي اگه بجاي اين عبارت از post استفاده كنيم ديگه در ادرس نشون داده نميشه . تركيب كردن پي اچ پي با اچ تي ام ال : به اين كد نگاه كنيد : PHP Code: <code style="white-space: nowrap;"> <code> <form action="<?php print $PHP_SELF?>" method="POST"> name: <input type="text" name="user"> </form> </code> </code> وقتي اين فرم رو اجرا كنيم فرم همواره خودشو صدا ميزنه چون ما از عبارت $PHP_SELF استفاده كرده ايم توجه كنيد كه ما هيچ دكمه اي رو صفحه قرار نداديم و در بيشتر مرورگرها با زدن كليد اينتر ميتونيم فرم رو اجرا كنيم . البته در كد بالا هيچ اطلاعاتي رو بيرون نميده ولي در كد زير ميخواهيم يه بازي ساده بنويسيم تا بيشتر متوجه بشيم : PHP Code: <code style="white-space: nowrap;"> <code> <?php $num_guess=42; $msg=" "; if (! Isset($guess)) { $msg="welcome To This Little Game"; } elseif ($guess>$num_guess) { $msg="number $guess is Big! Try Smaller number."; } elseif($guess<$num_$guess) { $msg="Number $guess is Small ! Try Big Number"; } else // vagti mosavi bashe { $msg="Well Done You Win"; } ?> </code> </code> توضيحات : با دستور ! كه اشنا هستيد همون دستور نقض ، اما دستور isset اين دستور چك ميكنه ببينه اصلا اطلاعاتي وارد شده يا نه ما در خط اول چك ميكنيم ببينم (اگه نه اطلاعاتي وارد شده) انگاه پيغام خوش آمد گويي رو پخش كن اين كد موقعي ميتونه اتفاق بيفته كه برا اولين بار صفحه رو باز كرده يا هيچ اطلاعاتي وارد نكرده . حالا ميرسيم به قسمت اچ تي ام ال اين كد رو زير كد بالايي قرار بديد PHP Code: <code style="white-space: nowrap;"> <code> <h1> <?php print $msg ?> </h1> <form action="<?php print $PHP_SELF?>" method="POST"> Guess Number : <input type="text" name="guess"> </form> </code> </code> خوب اين كد نيز اطلاعات رو از كاربر ميگيره و صفحه رو دوباره اجرا ميكنه و پيغام مناسب رو پخش ميكنه . ميخوايم با يه دستور جديد و كاربردي اشنا بشيم فرض كنيم بعد از اينكه كاربر در بازي بالا برنده شد ميخواهيم او را به يه صفحه جديد بفرستيم يعني ريدايركت كنيم ميتونيم از دستور زير استفاده كنيم اين دستور رو بجاي پيغامي بزاريد كه وقتي كاربر برنده ميشه انتخاب ميشه يعني بعد از else قرار بديد : PHP Code: <code style="white-space: nowrap;"> <code> header("Location: page.html"); exit; </code> </code> با دستور exit هم از داخل اين كد بيرون ميايم و به صفحه بعد منتقل ميشيم . نوبتي هم باشه نوبت كار با فايل هاست : PHP Code: <code style="white-space: nowrap;"> <code> <form enctype="multipart/form-data" action="<?print $PHP_SELF?>" method="POST"> <input type="hidden" name="MAX_FILE_SIZE" value="51200"> <input type="file" name="fupload"><br> <input type="submit" value="upload!"> </form> </code> </code> خوب ما با استفاده از دستور enctype="multipart/form-data" درواقع ميايم همون فايل ديالوگ رو باز ميكنيم در قسمت بعد ما يك متغيير مخفي ايجاد ميكنيم و سايز فايل رو تعيين ميكنيم و توش قرار ميديم كه در اينجا 51200 انتخاب كرديم حالا با دو خط بعد يه تكست باكس و يه دكمه ميزاريم . ما اينجا به كاربر اجازه ميديم تا 50 كيلوبايت فايل اپلود كنه . البته كد بالا جنبه نمايش داشت و عملا كاربرد زيادي نداره قبل از اينكه نمونه قابل اجرا رو امتحان كنيم بزاريد ليستي از متغيير هاي فايل اپلود رو براتون بگم مثال توضيح نام متغيير /tmp/php3d3ef مسير فايل اپلود شده $fupload Test.gif اسم فايل اپلود شده $fuploadname 51200 حجم بر حسب بايت $fuploadsize Image/gif نوع فايل اپلودي $fupload type حالا مثال ، در اين مثال ما اطلاعات فايل اپلئدي رو نمايش ميديم PHP Code: <code style="white-space: nowrap;"> <code> 1: <html> 2: <head> 3: <title>Listing 9.15 A file upload script</title> 4: </head> 5: <?php 6: $file_dir = "/home/mehdi/htdocs/uploads"; 7: $file_url ="http:// www.safary.com/mehdi/uploads"; 8: if ( isset( $fupload ) ) 9: { 10: print "path: $fupload<br>\n"; 11: print "name: $fupload_name<br>\n"; 12: print "size: $fupload_size bytes<br>\n"; 13: print "type: $fupload_type<p>\n\n"; 14: if ( $fupload_type == "image/gif" ) 15: { 16: copy ( $fupload, "$file_dir/$fupload_name") or die ("Couldn't copy"); 17: 18: print "<img src=\"$file_url/$fupload_name\"><p>\n\n"; 19: } 20: } 21: ?> 22: <body> 23: <form enctype="multipart/form-data" action="<?php print $PHP_SELF?>" method="POST"> 24: <input type="hidden" name="MAX_FILE_SIZE" value="51200"> 25: <input type="file" name="fupload"><br> x<input type="submit" value="Send file!"> 27: </form> 28: </body> 29: </html> </code> </code> فكر نميكنم نيازي به توضيح باشه بجز اين خط ( $fupload, "$file_dir/$fupload_name") copy اين دستور فايل مورد نظر رو روي سرور كپي ميكنه و اگه اشكالي پيش اومد عبارت Couldn't copy رو چاپ ميكنه در اينجا ما پس از اينكه از كاربر فايل رو درخواست كرديم اطلاعات مربوط به اون فايل رو نمايش ميديم كه ما در اينجا فرض كرديم كه كاربر يك عكس را اپلود كرده است .
آموزش پي اچ پي قسمت نهم(كار با فايلها) كار با فايلها در پي اچ پي پيوست دادن كدهاي ديگر در كد خود مان: شما ميتونيد يك كد رو در يك فايل ديگر بنويسد و هرجا لازم شد در يك كد ديگر كه در فايل ديگري هم قرار داره اونو صدا بزنيد تابع Include(); اين امكان رو به شما ميده و باعث سهولت و كم حجم شدن صفحات ميشه . اين تابع فقط به يك آرگومان نياز داره و اون مسير فايل پي اچ پي هست كه ميخوايم به صفحمون پيوند بديم بزاريد با يك مثال راحتتر بيان كنم : فرض كنيد ما در فايل a.php يك كد داريم كه يك پيغام رو چاپ ميكنه حالا ما ميخوايم همين دستور در فايل اول رو در فايل b.php بدون نوشتن دوباره دستور و با دستور اينكلود بنويسيم كافيه بنويسيم PHP Code: <code style="white-space: nowrap;"> <code> // file name is b.php <?php include("a.php"); ?> //will Print message in a.php </code> </code> البته چون در اينجا ما در فايل اولمون يك خط دستور داريم فرقي نميكنه ولي اگه چندين خط و چندين دستور باشه كار مارو خيلي راحت ميكنه چون فقط با يه خط كد ميتونيم همون دستورات رو صدا بزنيم . حتي ميتونيم يك مقدار رو با دستور اينكلود صدا بزنيم يا دستور اينكلود رو با توجه به يه شرط صدا بزنيم. يك مثال : PHP Code: <code style="white-space: nowrap;"> <code> <?php //this file name is a.php $ret=(4+4); return $ret; ?> </code> </code> _______ PHP Code: <code style="white-space: nowrap;"> <code> <?php //this file name is b.php $flag=true; if($flag) { $resualt=include("a.php"); print " The Sum Of (4+4) Is $resualt"; } ?> </code> </code> همونطور كه ديديد ميتونيم طوري تعريف كنيم كه اگه شرط درست نبود اصلا دستور اينكلود اجرا نشه و در خط بعدي مقدار فايل a.php رو توي يه متغيير ديگه مينوسيسم و چاپ ميكنيم . خوب بهتر بود قبل از اينكه بقيه آموزش رو بگم اينارو ميدونستيد حالا ميرسيم به كار با فايل ها : اولين تابعي كه ميخوايم بررسي كنيم تابع چك كردن وجود يك فايل هست ! به اين مثال توجه كنيد : PHP Code: <code style="white-space: nowrap;"> <code> <?php if (file_exists("a.php")) print "The File Exists"; ?> </code> </code> حتي ميتونيد با تابع ديگري بفهميد مسير داده شده يك فايل هست يا يك دايركتوري PHP Code: <code style="white-space: nowrap;"> <code> //Check if it's a file <?php if(is_file("a.php") print"yes this is file"; ?> /*-----------------------------*/ //Check if Current Path is a dir <?php if(is_dir("/tmp")) print"/tmp is valid"; ?> </code> </code> تابع ديگري كه وجود داره توابع is_readable , is_writeable , is_executeable هستن كه چك ميكنن ببينن فايل مورد نظر قابل خواندن و يا نوشتن ويا اجرا شدن هست يا مسير داده شده معتبر هست يا نه و يك مقدار از نوع بولين برميگردونه . تابع ديگري نيز وجود دارد كه سايز يك فايل رو برميگردونه خيلي ساده Print filesize("a.php"); اين تابع سايز فايل شما رو برحسب بايت نمايش ميده تابع ديگري كه ميخوايم بررسي كنيم تابع fileatime(); ميباشد كه اخرين باري كه يك فايل دسترسي پيدا كرد رو به ما بر ميگردونه ما در مثال زير ميخوايم بدونيم فايل a.php در چه تاريخ و زماني براي اخرين بار دسترسي پيدا كرده است : PHP Code: <code style="white-space: nowrap;"> <code> <?php $lasttime=fileatime("a.php"); print "The File last time accessed in ".date("D d M Y g:i A",$lasttime)."."; // Will Print Sat 14 jan 2006 10:30 Pm ?> </code> </code> تابع filemtime(); نيز مشابه fileatime(); هستش با اين تفاوت كه تاريخ و زمان اخرين باري كه فايل ويرايش شد رو برميگردونه . تابع filectime(); نيز وجود داره كه در سيستم هاي يونيك تاريخ تغيير يا ويرايش فايل رو برميگردونه ولي در پلت فرم هاي ديگه تاريخ بوجود آمدن فايل رو برميگردونه حالا ميرسيم به توابع كاربردي تر : تابع touch("file-path.txt"); در صورتي كه فايلي با اين نام وجود نداشته باشد اين فايل رو ايجاد ميكنه ولي اگه وجود داشته باشه كاري نميكنه و فقط تاريخ ويرايش فايل تغيير پيدا ميكنه و فايل از بين نميره با تابع unlink("file-path.txt"); ميتونيد يك فايل رو پاك كنيد نكته : در سيستم هاي يونيكس براي اينكه يك فايل را پاك يا ويرايش يا دست يابي پيدا كنيم لازم است كه دسترسي به فايل رو داده باشيد . بازكردن فايل قبل از خواندن و نوشتن : قبل از اينكه بتونيد يك فايل رو بخونيد يا محتوايش رو عوض كنيد به اين احتياج داريد كه اون فايل رو باز كنيد شما با اين دستور ميتونيد يك فايل رو براي خواندن اماده كنيد $f=fopen("file.txt",'r'); و با اين دستور ميتونيد فايل رو براي نوشتن اماده كنيد $f=fopen("file.txt",'w'); و براي اضافه كردن اطلاعات به يك فايل بايد از اين دستور استفاده كنيد (َAppend) $f=fopen("file.txt",'a'); بهتره قبل از اينكه اقدام به ويرايش يا باز كردن يك فايل كنيد اون رو امتحان كنيد ببينيد اجازه باز شدن يا ويرايش شدن رو داره ؟ PHP Code: <code style="white-space: nowrap;"> <code> If ($fp=fopen("file.txt",'w')) { // codehaie marboot be viraiesh file } </code> </code> يا ميتونيد بجاي كد بالا اينگونه عمل كنيد PHP Code: <code style="white-space: nowrap;"> <code> ($fp=fopen("file.txt",'w')) or die("Could Not open file"); </code> </code> اگه دستور فوق مقدار درست رو برگردونه پيغام Could Not open file نشون داده نميشه در غير اينصورت نشون داده ميشه . همون طور كه متوجه شديد هر عملياتي كه بخوايم بر سر فايل اجرا كنيم بايد داخل : Fopen(); // Code Fclose(); انجام بديم. پي اچ پي امكانات زيادي رو براي خوندن يك فايل در اختيار ما ميزاره بعنوان مثال شما ميونيد يك فايل رو برحسب بايت يا برحسب لاين يا برحسب كاراكتر بخونيد . بزاريد ابتدا يك مثال رو نگاه كنيم و بعد توضيحات مربوطه رو بخونيم : PHP Code: <code style="white-space: nowrap;"> <code> <?php $filename = "test.txt"; $fp = fopen( $filename, "r" ) or die("Couldn't open $filename"); while ( ! feof( $fp ) ) { $line = fgets( $fp, 1024 ); print "$line<br>"; } ?> </code> </code> با استفاده از دستور feof(); چك ميكنيم ببينم به اخر فايل رسيديم يا نه و اگه نه ميايم خط به خط با دستور وايل خط هاي فايل رو داخل يك متغيير ميريزيم و اونها رو چاپ ميكنيم . دستور fgets($fp,1024) اينكارو ميكنه و ميگه كه طول هر خط ميتونه تا 1024 بايت باشه . ما ميتونيم مقدار خاصي از فايلمون رو بخونيم مثلا 16 بايت يا 16 كاراكتر از فايلمون رو بخونيم PHP Code: <code style="white-space: nowrap;"> <code> <?php $filename = "test.txt"; $fp = fopen( $filename, "r" ) or die("Couldn't open $filename"); while ( ! feof( $fp ) ) { $chunk = fread( $fp, 16 ); print "$chunk<br>"; } ?> </code> </code> همونطور كه ديديد با دستور fread( $fp, 16 ); ما 16 كاراكتر از فايلمون رو ميخونيم . شما ميتونيد با تابع fseek() جاي مشخصي از فايل رو بخونيد به مثال زير نگاه كنيد PHP Code: <code style="white-space: nowrap;"> <code> <?php $filename = "test.txt"; $fp = fopen( $filename, "r" ) or die("Couldn't open $filename"); $fsize = filesize($filename); $halfway = (int)( $fsize / 2 ); fseek( $fp, $halfway ); $chunk = fread( $fp, ($fsize − $halfway) ); print $chunk; ?> </code> </code> در كد بالا ما نيمه دوم يك فايل رو چاپ ميكنيم .همه چيز واضح و روشن هست ونيازي به توضيح نيست دستور fgetc(); مثل دستور fgets() ميباشد كه اگه در كد بالا كه خط به خط يك فايل رو اجرا ميكرد بزاريد كاراكتر به كاراكتر فايل رو نشون ميده . براي نوشتن يا اضافه كردن مقدار به يك فايل بايد ابتدا فايل رو بصورت Foper("file.txt",'w'); Or Fopen("file.txt",'a'); شما ميتونيد با تابع fwrite(); داخل يك فايل مقداري رو قرار بديد ، دقت كنيد كه در اينصورت محتواي فايل قبلي پاك ميشه و ميتونيد با تابع fputs(); يك مقدار رو به فايل مورد نظر اضافه كنيد . كار كردن با اين دستورها ساده هست با اين حال يك مثال ميارم : PHP Code: <code style="white-space: nowrap;"> <code> <?php $filename = "test.txt"; $fp = fopen( $filename, "w" ) or die("Couldn't open $filename"); fwrite( $fp, "Hello world\n" ); fclose( $fp ); print "Appending to $filename<br>"; $fp = fopen( $filename, "a" ) or die("Couldn't open $filename"); fputs( $fp, "And Hello To You\n" ); fclose( $fp ); ?> </code> </code> حال ميرسيم به تابع تعيين دسترسي فايل شما ميتونيد با دستور flock(); براي يك فايل دسترسي هاي متفاوتي رو اعمال كنيد ليست شماره دسترسي ها به اين صورت است PHP Code: <code style="white-space: nowrap;"> <code> 1 ---- Sharing اجازه خواندن ميده ولي نوشتن خير 2 ---- Exclusive اجازه خواندن و نوشتن نميدهد 3 ---- Release دسترسي هاي بالا را ازاد ميكند </code> </code> نوبتي هم باشه نوبت كار با پوشه هاست : شما ميتونيد با دستور mkdir() , rmdir() پوشه اي ايجاد يا پاك كنيد توابع ساده اي هستن و نيازي به مثال نيست يك مثال براي بيشتر آشنا شدن با اين نوع توابع ، ميخوايم فايل هاي داخل يك پوشه رو نمايش بديم PHP Code: <code style="white-space: nowrap;"> <code> <?php $dirname = "testdir"; $dh = opendir( $dirname ); while ( gettype( $file = readdir( $dh )) != boolean ) { if ( is_dir( "$dirname/$file" ) ) print "(D)"; print "$file<br>"; } closedir( $dh ); ?> </code> </code> ما با دستور opendir() پوشه مورد نظرمون رو در ابتدا باز ميكنيم سپس با دستور وايل مسير فايلهامون رو ميگيريم و چك ميكنيم اگه متعلق به اين دايركتوري بودن عبارت (D) و سپس اسم فايل و مسيرش رو چاپ ميكنيم در نهايت با دستور closedir() ميبنديم . دستور readdir مقدار درست يا نادرست رو برميگردونه و اين بر حسب اين هست كه هر عددي بجز صفر مقدارش ترو ميشه بزاريد با مثالي توضيج بدم فرض كنيم ما چهار تا فايل داريم كه بر حسب ايندكس ما ميايم اينارو داخل وايل چك ميكنيم و تا زماني كه ايندكس صفر نشده شرط وايل ما درست هست و ادامه ميده و هنگامي كه صفر شد از وايل خارج ميشه .
آموزش پي اچ پي قسمت دهم - ديتابيس هاي فايلي كار با ديتابيس ها (فايل) اگه شما به ديتابيس هاس اس كيو ال مثل ماي اس كيو ال و اوراكل دسترسي نداريد ميتونيد از ديتابيس هاي DBM استفاده كنيد حتي اگه شما اگه نداشته باشينش پي اچ پي اون رو براي شما شبيه سازي ميكنه و به شما اجازه ميده داده هاتون رو توش ذخيره كنيد و بازيابي كنيد شون . در ضمن شما نياز به استفاده از دستورات اس كي ال نداريد چون بسيار راحت و انعطاف پذير هستن . در اين بخش ياد ميگيريم چطور : يك ديتابيس DBM رو باز كنيم چگونه داده را وارد كنيم چگونه داده را فراخواني كنيم چگونه تغيير ايجاد كنيم يا داده هارا پاك كنيم چگونه داده هاي پيچيده اي را وارد ديتا بيس كنيم باز كردن ديتا بيس : با استفاده از دستور dbmopen() شما ميتونيد ديتا بيس را باز كنيد و اين تا بع دو آرگومان ميگيره يكي مسير ديتابيسمون و ديگري نوع دسترسي به ديتا بيس كه نوع دسترسي ها به اين شكل هست توضيح نوع دسترسي در حالت فقط خواندي r براي خواندن و نوشتن w ساختن ديتابيس و اگر وجود دارد براي خواندن و نوشتن c ساخت يك ديتابيس جديد n با استفاده از دستور زير اگر ديتابيسي با اين نام وجود نداشته باشد باز ميشود : PHP Code: <code style="white-space: nowrap;"> <code> $db = dbmopen( "./products", "c" ) or die( "Couldn't open DBM" ); </code> </code> نكته : دقت كنيد كه ما از دستور die براي زماني استفاده كرديم كه قادر به ايجاد ديتابيس نباشيم . وقتي كارمون با ديتا بيس تموم شد با استفاده از دستور زير ديتابيس رو ميبنديم . PHP Code: <code style="white-space: nowrap;"> <code> dbmclose($db); </code> </code> اگه شما ديتابيس رو نبنديد قسمت هاي ديگري از برناممون كه به ديتابيس نياز دارند مجبور هستن تا صبر كنند و اين اصلا خوب نيست . اضافه كردن اطلاعات به ديتابيس : به مثال زير توجه كنيد : PHP Code: <code style="white-space: nowrap;"> <code> <?php $db=dbmopen("./users","c") or die("Could not open DBM"); dbminsert($db,"PersianTools.com","30000"); dbminsert($db,"IranVig.com","6000"); dbminsert($db,"CodeVig.com","100"); dbmclose($db); ?> </code> </code> و اينگونه اطلاعات رو اضافه ميكنيم و حالا براي تغيير اطلاعات به اين شكل عمل ميكنيم : PHP Code: <code style="white-space: nowrap;"> <code> <?php $db=dbmopen("./users","c") or die("Could not open DBM"); dbmreplace($db,"PersianTools.com","464420"); dbmreplace ($db,"IranVig.com","62351"); dbmreplace ($db,"CodeVig.com","6463"); dbmclose($db); ?> </code> </code> حالا كه ما تونستيم اطلاعاتمون رو وارد ديتابيس كنيم احتياج داريم تا اونهارو بتونيم بخونيم پس به اين صورت عمل ميكنيم : PHP Code: <code style="white-space: nowrap;"> <code> $users=dbmfetch($db,"PersianTools.com"); </code> </code> خيلي ساده بزاريد اين اطلاعات رو در قالب يك جدول فراخواني كنيم : PHP Code: <code style="white-space: nowrap;"> <code> <table border=1 cellpadding ="5"> <tr> <td align="center"> <b>product</b></td> <td align="center"> <b>price</b> </td> </tr> <?php $db = dbmopen( "./users", "c" ) or die( "Couldn't open DBM" ); $key = dbmfirstkey( $db ); while ( $key != "" ) { $value = dbmfetch( $db, $key ); print "<tr><td align = \"left\"> $key </td>"; print "<td align = \"right\"> \$$value </td></tr>"; $key = dbmnextkey( $db, $key ); } dbmclose( $db); ?> </table> </code> </code> و به اين صورت تمام اطلاعات رو با استفاده از يك حلقه فراخواني ميكنيم حالا شايد سوال پيش بياد كه چجوري بفهميم دادمون قبلا تو ديتا بيس وارد شده يا نه ؟؟ PHP Code: <code style="white-space: nowrap;"> <code> if ( dbmexists( $db, "PersianTools.com" ) ) print dbmfetch( $db, " PersianTools.com " ); </code> </code> براي پاك كردن يك مقدار از دستور PHP Code: <code style="white-space: nowrap;"> <code> dbmdelete($db,"PersianTools.com"); </code> </code> استفاده ميكنيم . اضافه كردن يك مقدار پيچيده به ديتابيس : PHP Code: <code style="white-space: nowrap;"> <code> $array = array( 1, 2, 3, 4 ); $db = dbmopen( "./ test", "c" ) or die("Couldn't open test DBM"); dbminsert( $db, "arraytest", $array ); print gettype( dbmfetch( $db, "arraytest" ) ); </code> </code> خوب باشه يه مثال كامل : PHP Code: <code style="white-space: nowrap;"> <code> <?php $products = array("PersianTools.com" => array( users=>"2200",stats=>"1500", color=>"blue" ), "Iranvig.com" => array( users=>"2213",stats=>"1234",color=>"blue" ) ); $db = dbmopen( "./test", "c" ) or die("Couldn't open products DBM"); while ( list ( $key, $value ) = each ( $products ) ) dbmreplace( $db, $key, serialize( $value ) ); dbmclose( $db ); ?> </table> </code> </code> بزاريد يك مثال كلي بزنيم تا بيشتر آشنا بشيم ما در اين مثال اطلاعات ديتابيسمون رو داخل يه جدول ميكشيم و كنار هر داده يه گزينه ميزاريم تا با انتخاب اون بتونه پاك كنه داده رو و همينطور يك تكست براي ويرايش ميزاريم و اين بخش رو تموم ميكنيم . PHP Code: <code style="white-space: nowrap;"> <code> <?php $dbh = dbmopen( "./users", "c" ) or die("Couldn't open test DBM"); if ( isset ( $delete ) ) { while ( list ( $key, $val ) = each ( $delete ) ) { unset( $prices[$val]); dbmdelete( $dbh, $val ); } } if ( isset ( $prices ) ) { while ( list ( $key, $val ) = each ( $stats ) ) dbmreplace( $dbh, $key, $val ); } if ( ! empty( $name_add ) && ! empty( $stats_add ) ) dbminsert( $dbh, "$name_add", "$stats_add" ); ?> <html> <body> <form action="<? print $PHP_SELF; ?>" action="POST"> <table border="1"> <tr> <td>delete</td> <td>Users</td> <td>stats</td> </tr> <?php $key = dbmfirstkey( $dbh ); while ( $key != "" ) { $price = dbmfetch( $dbh, $key ); print "<tr><td><input type='checkbox' name=\"delete[]\" "; print "value=\"$key\">$/td>"; print "<td>$key</td>"; print "<td> <input type=\"text\" name=\"prices[$key]\" "; print "value=\"$stat\"> </td></tr>"; $key = dbmnextkey( $dbh, $key ); } dbmclose( $dbh ); ?> <tr> <td> </td> <td><input type="text" name="name_add"></td> <td><input type="text" name="stats_add"></td> </tr> <tr> <td colspan=3 align="right"> <input type="submit" value="amend"> </td> </tr> </table> </form> </code> </code> فكر ميكنم اين سوال براتون پيش بياد كه چه موقع بايد از اين نوع ذخيره داده استفاده كنيم : خوب بايد بگم زماني كه داده هاي كمي برا ذخيره كردن داريد ميتونيد از اين روش استفاده كنيد كه خيلي روش ساده اي هست و بدرد بخور . اميدوارم لذت برده باشيد .