• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
نکات ریز در کدنویسی را از حالا به خاطر بسپارید
#1
سلام،
حتماً شما هم درست مثل من در گذشته ، از اینکه حتماً در کدنویسی ایراد داشته دارید و حتماً می ترسید و باید خط به خط امتحان کنید که خروجی هست ناراحتید. دست کم من که اینطوری بودم !
یکی از عواملی که باعث بروز چنین اشتباهاتی در کد نویسی و ناراحتی در شما میشه ، کم بودن اطلاعات هست. خب ایرادی نداره اگر اطلاعاتمون کمه اما فقط نباید به اون یه ذره اطلاعاتمون بچسبیم و بیخیال یادگیری بیشتر بشیم. پس بیشتر سوال کنید ، بیشتر سوالات دیگران رو دنبال کنید ، بیشتر مقاله بخونید ، زبان انگلیسیتون رو تقویت کنید ، دانش پایه و اساسی ریاضی رو در خودتون تقویت کنید [1] ، بیشتر کد بنویسید ، بیشتر رو کدی که مد نظرتون هست فکر کنید و خودتون راه نوشتن رو پیدا کنید و غیره
در کد نویسی یکسری نکات ریز هست که باعث بروز خطا های بسیار ریز میشه که ناشی تجربه کم برنامه نویس هست. البته شاید در مقالاتی که خوندید ذکر کرده باشن اونها رو ولی گفتم که ، چون خیلی ریزن ، بعضی اوقات فراموش میشن.

1. دستور global داخل کلاس و خارج فانکشن تعریف نمیشه! بلکه یک فانکشن می تونه این دستور رو مختص خودش داشته باشه و حتی فانکشن دیگه نمی تونه از اون استفاده کنه
2. اگر شما در فایل a دو فایل رو اینکلود کردید که فایل اولی در فایل اینکلود شده دومی هم مورد نیاز هست ، چون فایل دومی در فایل a همونی که فایل مورد نیازش اینکلود شده ، دیگه نیازی نیست اون فایل اول رو در فایل دوم هم تعریف کنید
3. دستور return با با حروف کوچک نوشته شود و دستور های FALSE و NULL و TRUE با بزرگ نوشته شوند زیرا constant هستند و جزء اصول برنامه نویسیه (با تشکر از یوشا)
4. اگر از ویرایشگر php پیشرفته استفاده نمی کنید ، فراموش نکنید که هر خط که تموم میشه باید یک “;” در آخرش نوشته شود
5. اگر دستوری رو نوشتید که در ساختار خودش پرانتز داره مثل if() فراموش نکنید پرانتز رو به موقع ببندید
6. حتماً حتماً از کامنت ها استفاده کنید. مهم نیست طول متنت چقدره فقط بنویس تا فراموش نکنی
7. اگر از session استفاده می کنید ، برای شروع باید حتماً در اول همون فایل از session_start() استفاده کنید
8. خطا ها رو بشناسید. معمولاً خیلی واضح در php خطا ها مشخص میشن.
9. خطای headers already sent مربوط به اینه که هدر(ها) زمانی ارسال شدن که پیش از اون یک خروجی داشتید در صورتی که نباید چنین باشه اما گاهی پیش میاد که نمیشه کاری کرد برای همین باید از دو دستور ob_start() در آغاز فایل و ob_end_flush() در پایان فایل استفاده کرد
10. فایل هایی که توشون از حروف غیر انگلیسی (فارسی مخصوصاً) استفاده می کنید رو قبل استفاده ازشون حتما با hex editor چک کنید چون قبل شروع تگ آغازین php یکسری کد ارسال میشن که بی خودی تشریف دارند!
11. utf-8 برای فایل هایی که توشون از کاراکتر های فارسی به ویژه استفاده میشه مناسب هست در غیر اینصورت utf-8 without bom مناسبه.
12. هل نکنید و وقتی که فهمیدید همه چی رو نوشتید اونوقت کدتون رو اجرا کنید تا از درست کار کردن اون مطمئن بشید.
13. تو هم تو هم ننویسید و سعی کنید فاصله ها رو رعایت کنید.
14. If به معنی "اگر" هست و elseif به معنی "یا اگر" و else به معنی "در غیراینصورت" ، پس اگر خواستید فقط یک چیز رو مورد بررسی قرار بدید ، می تونید از همه اونا استفاده کنید ، اما وقتی در if و elseif دو چیز متفاوت داشت بررسی می شد ، مطمئن باشید خروجی اولین بررسی صحیح فقط و فقط نمایش داده میشه حتی اگر بررسی های بعدی هم صحیح باشند. در چنین مواقعی مورد نداره برای همه بررسی ها از if استفاده کنید.
15. case اول موجود در دستور switch به معنی "اگر" هست و مابقی به معنی "یا اگر" و default به معنی "در غیراینصورت" یا "بطور پیشفرض" هست
16. در استفاده از case هرگز break; رو برای پایان case فراموش نکنید در غیر اینصورت همه یک case محسوب می شن و خروجی همه با هم نمایش داده میشه بدون هیچ خطایی!
17. بهتره عادت کنید برای رشته ای که فقط رشته هست یعنی هیچ متغیری درونش نیست از سینگل کوتیشن (‘) استفاده کنید در غیراینصورت موتور php فرض می کنه چیز خاصی داخلش هست و بیشتر روش وقت میگذاره و با دقت بیشتری تفسیرش می کنه در صورتی که نیاز نیست و این باعث کاهش سرعت عملکرد برنامه تون میشه.
18. در داخل کلاس و خارج فانکشن حتماً نباید هر متغیر تعریف بشه. بلکه زمانی اینکارو می کنیم که بخوایم از اون متغیر در دو یا بیشتر فانکشن استفاده کنیم در غیر اینصورت چون اون متغیر فقط در یک فانکشن کاربرد داره نیاز نیست پیش از اون حتماً تعریف بشه.
19. در داخل کلاس و خارج فانکشن هرگز متغیری که تعریف میشن نمی تونن بطور غیر مستقیم مقداری بگیرن یعنی فرض کنید ، متغیر $name تعریف شده و باید مقدار علیرضا رو داشته باشه ، اما این مقدار رو بصورت مستقیم بهش نمیدیم بلکه ارجاع میدیم به یک متغیر دیگه که اون مقدار رو داره. اگر اینگونه عمل کنید خطا دریافت خواهید کرد.
20. "!" منفی ساز هست. یعنی اگر دستوری مثل isset() که بررسی می کنه ست شده باشه ، اگر پشتش اون علامت بیاد ، بررسی می کنه که ست نشده باشه
21. حتماً عمگر ها رو به خوبی بشناسید. مثلاً فرق بین = و == و === در اینه که اولی مقداری رو اختصاص میده و دومی برابر بودن رو بررسی می کنه و سومی علاوه بر اینکه برابر بودن رو بررسی می کنه میاد نوع اون مقدار (رشته ، صحیح و غیره) رو هم بررسی می کنه و سعی کنید از == و === در جایی استفاده کنید که مناسبه
22. بیشتر با HTML آشنا بشید ، چون در PHP حتماً به ویژه با فرم ها سر و کار خواهید داشت
23. سعی کنید دستوراتی که تا الآن بکارتون میاد رو به بهترین نحو ممکن یا بگیرید و ساختارش رو بفهمید.
24.
کد پی‌اچ‌پی:
isset( $_GET[‘x’] ) || isset( $_GET[‘y’] ) 
با
کد پی‌اچ‌پی:
isset( $_GET[‘x’], $_GET[‘y’] ) 
فرق داره! اولی میگه که یا x باشه یا y اما دومی میگه حتماً باید هم در x باشه و هم در y (با تشکر از حسین بقایی)
25. AND (در mysql) و and (در php یا &&) بدین معنیه که مثلاً یک مقدار هم در x باشه و هم در y ولی OR (در mysql) و or (در php یا ||) به این معنیه که مثلاً یک مقدار یا در x باشه یا در y.
26. اگر در حلقه ای (مثلاً for) یا خارج آن یه متغیر تعریف بشه (اگر در خارج تعریف شده باشه به شرطی این قانون صحیحه که در حلقه بعنوان متغیر اصلی برای تکرار ازش استفاده شده باشه) در خارج حلقه از اون متغیر هم میشه استفاده کرد و اولین استفاده ادامه اون حلقه خواهد بود. مثلاً:
کد پی‌اچ‌پی:
$i 0;
for(;
$i<=3;$i++) {
print 
$i ‘ ‘;
//khoroji ta inja > 0 1 2 3
print $i//hala khoroji mishe 0 1 2 3 4 
27. اگر خواستید از عددی یک واحد کم یا به آن اضافه کنید یادتون باشه $i++ با ++$i با هم فرق دارن! اولی یک واحد به متغیر بعدی مشابه خودش (در اینجا $i) می کنه اما دومی یه واحد به خودش اضافه می کنه. مثلاً:
کد پی‌اچ‌پی:
$i 0;
print ++
$i;
print 
$i;
#khoroji> 1 1
print $i++;
print 
$i;
#khoroji> 0 1 
[1] : علاوه بر اینکه باید یکسری مفاهیم پایه از ریاضی بدونید ، باید بدونید حتی تو ریاضی مشتق گیری و دنباله ها هم استفاده میشه اما بصورت ساده. مثلاً خودم تو برنامه ام نیاز داشتم برای حلقه ای ، حتماً یه دنباله بنویسم ! پس گاهی ممکنه خیلی چیزا نیاز بشه
غایب
  پاسخ
#2
ممنون
فقط مورد ۳ چرا باید باید با حروف بزرگ نوشته بشه؟
  پاسخ
تشکر شده توسط :
#3
نقل قول:فقط مورد ۳ چرا باید باید با حروف بزرگ نوشته بشه؟
راستش وحید جان ، این دستور ها هم با حروف کوچیک درستن هم با حروف بزرگ ولی استانداردشون (تا اونجا که خودم امتحان کردم و دیدم) با حروف بزرگ هستند. مثلاً دستور null در ویرایشگر adobe dream weaver شناسایی نمیشه و رنگش مشکی هست بجای اینکه سبز باشه ولی بزرگش درسته و مابقی هم درست کار می کنن چه بزرگ و چه کوچیک ولی دیدم چون از این دستور ها زیاد استفاده میشه بهتره این رو در اونا رعایت کنیم و یه فرقی براشون قایل بشیم. البته اینا اطلاعات منه و من می نویسم تا اشتباهاتم برطرف بشه و شاید کسی چیزی یاد بگیره Heart (شاید بهتره "بهتره" رو با "باید" جایگزین کنم.
غایب
  پاسخ
تشکر شده توسط : Goback
#4
کد پی‌اچ‌پی:
<?php
$i 
0;
for(;
$i<=3;$i++) {
print 
$i '';
//khoroji ta inja > 0 1 2 3
print $i//hala khoroji mishe 0 1 2 3 4 
?>
نکته 26 ت رو نمیدونستم!
برام جالب بود،تا تستش نکردم یقین نکردم.
کسی میدونه این برای بقیه زبانهای برنامه نویسی هم صادقه یا نه؟؟

اللهم صل علی محمد و آل محمد و عجل فرجهم

افلاطون را گفتند چرا هرگز غمگین نمیشوی؟
گفت :دل برآنچه نمی ماند،نمی بندم.
  پاسخ
تشکر شده توسط :
#5
نقل قول:فقط مورد ۳ چرا باید باید با حروف بزرگ نوشته بشه؟
چون Constant هستن.
جزو اصول برنامه نویسه.
وبلاگ: Yousha.Blog.ir


کد کمتر => خطای کمتر => قابل فهمتر => خوانایی بیشتر => نگهداری بهتر
  پاسخ
تشکر شده توسط : cyletech
#6
(۱۳۹۰ اردیبهشت ۲۷, ۰۵:۳۱ ب.ظ)Y.P.Y نوشته:
نقل قول:فقط مورد ۳ چرا باید باید با حروف بزرگ نوشته بشه؟
چون Constant هستن.
جزو اصول برنامه نویسه.
فک کنم :
اصل true, false, null به صورت حروف کوچیک هستش
اما حروف بزرگ constant ( ثابت ) ایی هستند که با اون مقدار ها ست شده اند
همونطور که یوشای عزیز گفتن ...
  پاسخ
تشکر شده توسط :
#7
نقل قول:چون Constant هستن.
جزو اصول برنامه نویسه.
من نتونستم درست بیان کنم. اینو. مرسی زیاد زیاد یوشا Heart
غایب
  پاسخ
تشکر شده توسط :
#8
نقل قول:1. دستور global داخل کلاس و خارج فانکشن تعریف نمیشه! بلکه یک فانکشن می تونه این دستور رو مختص خودش داشته باشه و حتی فانکشن دیگه نمی تونه از اون استفاده کنه
دستور global یک میدادن دید ( محدوده ایی که متغییر رویت می شه ) متغییر رو global می کنه. در توابع و متد ها میدان دید متغییر رو به درون تابع محدود می کنن که با استفاده از global می شه به متغییر های درون تابع میدان دید خارج از تابع داد.
لینک : http://php.net/manual/en/language.variables.scope.php

نقل قول:If به معنی "اگر" هست و elseif به معنی "یا اگر" و else به معنی "در غیراینصورت" ،
if یعنی ؛ اگر؛
else یعنی ؛ در غیر این صورت ؛
پس else if یعنی ؛ در غیر این صورت اگر ؛ Big Grin

نقل قول:18. در داخل کلاس و خارج فانکشن حتماً نباید هر متغیر تعریف بشه. بلکه زمانی اینکارو می کنیم که بخوایم از اون متغیر در دو یا بیشتر فانکشن استفاده کنیم در غیر اینصورت چون اون متغیر فقط در یک فانکشن کاربرد داره نیاز نیست پیش از اون حتماً تعریف بشه.
این یعنی چی؟ منظورت موقع استفاده از global هست؟!
نقل قول:19. در داخل کلاس و خارج فانکشن هرگز متغیری که تعریف میشن نمی تونن بطور غیر مستقیم مقداری بگیرن یعنی فرض کنید ، متغیر $name تعریف شده و باید مقدار علیرضا رو داشته باشه ، اما این مقدار رو بصورت مستقیم بهش نمیدیم بلکه ارجاع میدیم به یک متغیر دیگه که اون مقدار رو داره. اگر اینگونه عمل کنید خطا دریافت خواهید کرد.
و اینم باز یعنی چی؟ می تونه با کد مثال بزنی؟
نقل قول:24.
کد پی‌اچ‌پی:
isset( $_GET[‘x’] ) && isset( $_GET[‘y’] ) 
کد پی‌اچ‌پی:
isset( $_GET[‘x’], $_GET[‘y’] ) 
فرق داره! اولی تأکید می کنه که حتماً هر دو x و y وجود داشته باشند اما دومی میگه یا x وجود داشته باشه یا y
اصلآ هم فرق ندارن! فک کنم باید بجای && از || استفاده می کردی تا درست شه ...
لینک : http://ir.php.net/manual/en/function.isset.php

نقل قول:26. اگر در حلقه ای (مثلاً for) یا خارج آن یه متغیر تعریف بشه (اگر در خارج تعریف شده باشه به شرطی این قانون صحیحه که در حلقه بعنوان متغیر اصلی برای تکرار ازش استفاده شده باشه) در خارج حلقه از اون متغیر هم میشه استفاده کرد و اولین استفاده ادامه اون حلقه خواهد بود. مثلاً:
این همون مفهموم میدان دید هست. در PHP در حلقه ها برای متغییر ها محدوده دید ایجاد نمی شود

نقل قول:27. اگر خواستید از عددی یک واحد کم یا به آن اضافه کنید یادتون باشه $i++ با ++$i با هم فرق دارن! اولی یک واحد به متغیر بعدی مشابه خودش (در اینجا $i) می کنه اما دومی یه واحد به خودش اضافه می کنه. مثلاً:
++ یکی به مقدار متغییر اضافه می کنه
-- یکی از مقدار متفییر کم می کنه

حالا اگه این عملگر قبل از متغییر بیاد اول عمل کم/اضافه اعمال می شه بعد عمل دوم ( در صورتی که عمل دومی وجود داشته باشه ) و اگه بعد از متغییر قرار بگیره دوم عمل کم/اضافه اعمال می شه
کد پی‌اچ‌پی:
<?PHP

$i 
10;
$j = ++$i;

// $i == 11
// $j == 11

$k $i++;

// $i == 12
// $k == 11 
  پاسخ
تشکر شده توسط : Goback
#9
نقل قول:این یعنی چی؟ منظورت موقع استفاده از global هست؟!
آره خب اگر از global بخوای استفاده کنی از اون متغیری که داخل یک فانکشن نوشتی هم می تونی استفاده کنی ولی در اینجا ما نمی خوایم ازش استفاده کنیم. بلکه داشتم می گفتم اگر بخوایم فقط یکبار از یک متغیر اونم داخل یک فانکشن استفاده کنیم و بس دیگه نیازی نیست حتماً بعد از class اون رو تعریف کنیم بعد با this بهش دسترسی پیدا کنیم بلکه همون داخل فانکشن بدون هیچ this بسازیمش بره! ولی در غیر اینصورت هم میتونیم از global استفاده کنیم که شما اشاره کردی و هم اینکه میتونیم بعد از کلاس تعریفش کنیم
نقل قول:و اینم باز یعنی چی؟ می تونه با کد مثال بزنی؟
رو چشم.

کد پی‌اچ‌پی:
class names {

public 
$myname 'Alireza';

function 
#...
// in doroste

#ama in yeki ghalate
class {
    public 
$myname 'alireza';
}
$A = new A();

class 
{
    public 
$myname $A->myname;


نقل قول:اصلآ هم فرق ندارن! فک کنم باید بجای && از || استفاده می کردی تا درست شه ...
Big Grin خودت میگی باید بجای && از || استفاده کنی. خب اگر استفاده نکنم اونوقت برابر نیست دیگه! در کل خواستم بگم که اگر دو تا متغیر در isset چک بشه (چون قابلیتشو داره) به معنی "یا" هست نه "و" ولی اگر آره بجای && از || استفاده می کردم حق با تو بود Heart

نقل قول:حالا اگه این عملگر قبل از متغییر بیاد اول عمل کم/اضافه اعمال می شه بعد عمل دوم ( در صورتی که عمل دومی وجود داشته باشه ) و اگه بعد از متغییر قرار بگیره دوم عمل کم/اضافه اعمال می شه
نه دیگه داری اشتباه می کنی. مثالت کاملاً اشتباست. وقتی $i برابر 10 هست ، همون 10 می مونه اما متغیر $j چون یک واحد بیشتر از مقدار $i هست پس میشه 11 ولی باز متغیر $i تغییر نمی کنه! در صورتی که تو نوشتی هر دو برابر 11 ! مثال دومتم باز اشتباست. چون متغیر $k برابر متغیر $i هست یعنی همون 10 نه! 12 البته در این مثال تو. چون تو گفتی $k برابر اولین متغیر مشابه $i که یه واحد از $i بیشتر داره. چون در اینجا متغیر $i بعدی وجود نداره پس همون $i یا 10 باقی می مونه!
غایب
  پاسخ
تشکر شده توسط :
#10
بسم الله الرحمن الرحیم
سلام
علیرضا جام همین الان تست کردم تو isset اگه دوتا متغیر داشته باشی یعنی 'و' ها نه 'یا'
یه تست بکن
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان