PDA

View Full Version : حرفه ای: چند نکته در PHP برای حرفه ای شدن!



Pedram77
دوشنبه 10 فروردین 1394, 20:02 عصر
سلام.
من چند تا ترفند PHP بلدم که تو پروژه هام خیلی ازشون استفاده میکنم .این نکات خیلی ظریفند ولی توی صرفه جویی زمان خیلی عالین. پس نکات رو میگم:

میانبر برای else :

روش قدیمی:



if($a=10)
$b="Ten";
else
$b="Not Ten";

راه میانبر :



$b="Not Ten";
if($a=10)
$b="Ten";

از بین بردن براکت های اضافه :

روش قدیمی :




if($text=="over")
{
$height++;
}

for($x=1;$x<=10;$x++)
{
echo "RUN ";
}

روش بهینه :



if($text=="over") $height++;

for($x=1;$x<=10;$x++)
echo "RUN ";

از عملیات های بهینه استفاده کنید:

روش قدیمی :



if(empty($_REQUEST["username"]))
{
$user = "none";
}
else
{
$user = $_REQUEST["username"];
}

روش بهینه :



$user = (empty($_REQUEST["username"]))? "none" : $_REQUEST["username"];

از یک فریم ورک استفاده کنید (خیلی مهم) :

خیلی سخت است اگر بخواهید یک پروژه ی بزرگ را از پایه طراحی کنید! فریم ورک یک چهار چوب در PHP تعیین میکند و شما لازم نیست "چرخ را از نو بسازید" در واقع سرعت نوشتن پروژه ی شما را خیلی بالا میبرد. برای PHP فریم ورک های زیادی وجود داره که چند تا از آنها را مینویسم:


Cake PHP
Zand
Symfony
CodeIgniter
...


برای مدیریت error از @ استفاده کنید :

روش قدیمی :


if(isset($a))
$b = $a;
else
$b = null;

روش جدید :



$b = @$a;




فعلا همین چند تا نکته به ذهنم رسید که رعایت کردن همینا میتونه کلی کار شما رو جلو بندازه.:چشمک:

Tarragon
دوشنبه 10 فروردین 1394, 20:35 عصر
سلام روش هایی که من به ذهنم رسید ایناست:
میابر برای else:
$b = ($a == 10?'Not ':'').'Ten';

در return ها : بجای
return $variable == true ? true : false; از
return $variable استفاده کنیم.

چندتا لینک:
http://ashiyane.org/forums/showthread.php?13089

http://forum.iranphp.org/Thread-%D9%86%DA%A9%D8%A7%D8%AA-%D9%88-%D8%A7%D8%B5%D9%88%D9%84-%D9%85%D9%87%D9%85-%D8%AF%D8%B1-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-2

http://weblearn.blogfa.com/post-242.aspx

freeman99
سه شنبه 11 فروردین 1394, 09:06 صبح
$b = @$a;


توصیه میکنم تا میتونید از استفاده از @ پرهیز کنید.
بخاطر اینکه این کار باعث میشه هرگونه خطا و اطلاعاتی خاموش بشه، و این میتونه باعث ایجاد باگهایی در برنامه بشه که آدم متوجه نشه (چون هیچ نشانه و پیامی دیده نمیشه). این عملگر باعث میشه هیچ پیام خطایی حتی در error logging هم ثبت نشه (منظورم ثبت خطاها در فایله و نه نمایش در مرورگر).
من خودم اخیرا که اومدم و یکسری از @ های غیرضروری رو از برنامم حذف کردم متوجه یکی از این موارد که ازش غفلت کرده بودم ولی بعلت وجود @ هیچوقت هیچ نشانه ای رو ازش ندیده بودم شدم.
باگ هم لزوما چیزی نیست که در کارکرد ظاهری برنامه اختلال و خطای واضحی ایجاد کنه که از راههای دیگه بتونید متوجه بشید. بعضی موارد میتونن امنیتی هم باشن.
این کد:

if(isset($a))
$b = $a;
else
$b = null;
بنظر من خیلی اصولی تره.
حالا شاید به شکلهای دیگری هم بشه نوشت، ولی بهرصورت خطاها و پیامهای PHP رو نباید خاموش کرد.

ضمنا بطور معمول شما نمایش پیامها رو فقط موقع توسعه و تست فعال دارید، و موقعی که برنامه deploy میشه (یعنی روی سرورهای اصلی برای کاربرد واقعی میره)، نمایش پیامهای خطا رو خاموش میکنید. البته error logging رو که باید همیشه داشته باشید. بطور کلی هم هرجای برنامه، PHP پیام و هشداری میده، باید علتش پیدا و رفع بشه در زمان توسعه و تست، نه اینکه با @ خفه خونش کنید! یه وقتا هم میبینی که توسعه و تست رو انجام دادید و ظاهرا مشکلی نبود، ولی یکسری شرایط خاص در عمل و بعد از deployment پیش میان که در جریان توسعه و تست مشخص نشده بودن، بنابراین بازهم اهمیت داره که از @ استفاده نکرده باشید تا اینطور موارد اونوقت بتونن سریع و راحت تشخیص داده بشن (حداقل هر چند وقت یک بار یه سری به error log برنامه بزنید).

البته من خودم هنوز در جاهایی از برنامم از @ استفاده کردم که اونا رو حذف نکردم، چون دیدم براحتی نمیشه این کار رو کرد و نیاز به فکر و تمهید بیشتری داره، ولی در اون موارد خطاهای مورد انتظار توسط خود برنامه هندل شدن. مثلا یک نمونه کد در کلاس دیتابیس خودم:

$this->link= @ mysql_connect($host, $user, $pass);
if(!$this->link) {
$this->error();
return;
}
در این کد مشاهده میکنید که با اینکه از @ استفاده شده اما در خط بعدی رخ دادن خطای اتصال چک شده.
البته خوبه الان که این بحثها رو کردم یاد این موارد افتادم و باید دوباره برگردم روش فکر کنم ببینم آیا قابل توجیه هست یا نه و ببینم آیا @ ها رو حتی در این موارد حذف کنم و داستان رو طور دیگری هندل کنم یا نه. چون بهرحال استفاده از @ حتی در این موارد هم چندان مطلوب و بدون ریسک بنظر نمیرسه. باید بیشتر روش فکر و تحلیل بشه :متفکر:

MMSHFE
سه شنبه 11 فروردین 1394, 14:34 عصر
بهتره برای رعایت استانداردها و جلوگیری از بروز خطاهای ناخواسته در ویرایشهای بعدی کدها (ازقبیل اضافه شدن دستورات بلاک if و...)، Bracket ها رو هم حذف نکنید. حتی اگه یک دستور دارین.

از REQUEST_$ هم استفاده نکنید و مشخص کنید که با GET میخواین کار کنین یا POST

درمورد خطای این کد هم:

$this->link= @ mysql_connect($host, $user, $pass);
if(!$this->link) {
$this->error();
return;
}
بهتره اینطوری کار کنید:

class DB
{
private $link;

public function connect($host, $user, $pass, $db)
{
if(!$this->link) {
if(!($this->link = mysql_connect($host, $user, $pass))) {
$this->error('Connection error');
}
elseif(!mysql_select_db($db, $this->link)) {
$this->error('Database error');
}
else {
mysql_query('SET NAMES \'utf8\'');
}
}
}

public function query($query)
{
$this->connect();
return mysql_query($query, $this->link);
}

// ...
}

j_naroogha@yahoo.com
سه شنبه 11 فروردین 1394, 15:47 عصر
سلام.
من چند تا ترفند PHP بلدم که تو پروژه هام خیلی ازشون استفاده میکنم .این نکات خیلی ظریفند ولی توی صرفه جویی زمان خیلی عالین. پس نکات رو میگم:

میانبر برای else :

روش قدیمی:



if($a=10)
$b="Ten";
else
$b="Not Ten";

راه میانبر :



$b="Not Ten";
if($a=10)
$b="Ten";

از بین بردن براکت های اضافه :

روش قدیمی :




if($text=="over")
{
$height++;
}

for($x=1;$x<=10;$x++)
{
echo "RUN ";
}

روش بهینه :



if($text=="over") $height++;

for($x=1;$x<=10;$x++)
echo "RUN ";

از عملیات های بهینه استفاده کنید:

روش قدیمی :



if(empty($_REQUEST["username"]))
{
$user = "none";
}
else
{
$user = $_REQUEST["username"];
}

روش بهینه :



$user = (empty($_REQUEST["username"]))? "none" : $_REQUEST["username"];

از یک فریم ورک استفاده کنید (خیلی مهم) :

خیلی سخت است اگر بخواهید یک پروژه ی بزرگ را از پایه طراحی کنید! فریم ورک یک چهار چوب در PHP تعیین میکند و شما لازم نیست "چرخ را از نو بسازید" در واقع سرعت نوشتن پروژه ی شما را خیلی بالا میبرد. برای PHP فریم ورک های زیادی وجود داره که چند تا از آنها را مینویسم:


Cake PHP
Zand
Symfony
CodeIgniter
...


برای مدیریت error از @ استفاده کنید :

روش قدیمی :


if(isset($a))
$b = $a;
else
$b = null;

روش جدید :



$b = @$a;




فعلا همین چند تا نکته به ذهنم رسید که رعایت کردن همینا میتونه کلی کار شما رو جلو بندازه.:چشمک:


همه ترفندهات که نقض شد بوسیله دوستان....:لبخند:

m.esmaeilzadeh
سه شنبه 11 فروردین 1394, 18:02 عصر
ممنون ولی مواردی که فرمودید قدیمی و جدید نبودن و اکثرا در نسخه های قدیمی php هم قابل پیاده سازی بود ....
اتفاقا استفاده از آکولاد { } خیلی بهتره !
خوانا تر میشه ...