یک وبلاگ دیگر از یک برنامه نویس دیگر
فوت کوزه گری
نکته های نه چندان کوتاه، بیشتر درباره برنامه نویسی (کد نوشتن مثل کوزه گریه، شاید هم خودشه!)
رشته ها و آرایه ها PHP
خرداد ۱۳م
امروز درگیر یک کد بودم شبیه این :
<?php $string = "This is a string"; if (isset($string['default'])) echo $string['default'];
به نظر شما خروجیش چیه؟؟؟ یعنی اصلا چیزی باید چاپ بشه یا نه؟ من معتقدم که نباید چیزی چاپ بشه. یعنی شرط if اصلا درست نیست که بخواد برسه به echo ولی مساله مسخره اینه که isset میگه این ایندکس وجود داره و -برداشت شخصی من اینه که- PHP وقتی میخواد یه رشته رو باهاش به صورت آرایه ای برخورد کنه، اول ایندکس آرایه رو به صورت عدد درمیاره با اون قواعدی که خودش داره، ( قواعد استاندارد خودش ) بعد اون کاراکتر رو چاپ میکنه.
نتیجه خیلی غیر قابل تصور بود برای من!!!!!
حالا اگه بگم تا ۱ ساعت درگیر این مساله مسخره بودم و این کد :
foreach ($opts as $opt => $value)
{
if (isset($value['default']) )
{
$result[$opt] = $value['default'];
}
elseif (isset($value['type']))
{
$result[$opt] = '';
}
else
{
$result[$opt] = $value;
}
}
چقدر منو عذاب داد مطمئن باشید راست میگم و اصلا اغراق نیست!!!!!!
نظر شما چیه؟ این باگه؟ یا همینه که هست؟ باید گزارش بشه یا نه؟؟؟؟ کلا درسته که تبدیل روی ایندکس هم انجام بشه؟
– خیلی وقت بود ننوشته بودم :)چقدر دلم تنگ شده بود!!
– پی نوشت :نمیدونم چطوری اشتباهی :) نظرها رو بسته بودم. الان بازه دیگه ….
بازم PHP و نکات کوچیکش!
دی ۲م
یه پرسشنامه برای گرفتن چند تا برنامه نویس PHP طرح کرده بودم (بنا به خواست یه کارفرما). چند تا سوال در زمینه PHP هم پرسیده بودم، یکیش همون قضیه اولویت عملگرها بود و دقیقا کدی که اینجا هست رو پرسیده بودم خروجیش چی میشه، که هیچ کس درست جواب نداده بود. (برام زیاد دور از انتظار نبود.) یکی هم این قضیه اپراتورهای Identical بود که چند نفر درست جواب دادن ولی خیلی کم.
سوال دیگه ای هم که هیچ کس جواب نداده بود ( و یه کم هم عجیب بود برام! این دیگه سخت نیست که!! ) این بود که خروجی کد زیر چیه :
<?php
$x=0123;
if ($x==123)
echo "Equal";
else
echo "Not equal";
جالبه که حتی یه نفر از اینها (که چند تاییشون در حدی مدعی بودن که من با خودم گفتم دیگه باید برم غاز بچرونم!) این سوال رو جواب ندادن!
ادامه مطلب
echo vs. print
آذر ۱۷م
حتما دو تا تابع echo و print رو میشناسید. این دو تا عملا یه کار رو انجام میدن. پس چرا شدن دو تا تابع؟ تفاوتشون چیه؟؟
خوب من سعی میکنم که توضیح بدم این قضیه رو.
شباهتها
هر دو تابع نیستن :) جزئی از ساختار زبانی هستن. یعنی میشه بدون پرانتز فراخوانیشون کرد ولی استفاده از توابعی مثل call_user_func و call_user_func_array براشون جواب نمیده (البته به صورت مستقیم، وگرنه اگه تو یه تابع باشن و اون یه تابع فراخوانی بشه بصورت غیر مستقیم میشه.).
پس :
//Call them like functions:
print ("This is a test<br />");
echo ("This is a test<br />");
// No parenthesis:
print "This is a test<br />";
echo "This is a test<br />";
هر دو درستن. بدون پرانتز و با پرانتز.
تفاوتها
ادامه مطلب
PHP و فایلها…
آبان ۱۸م
توی ویندوز کوچک و بزرگ بودن حروف در اسم فایلها تاثیری نداره. ولی توی لینوکس این یه کم متفاوته، مثلا تو ویندوز TEST.php و test.php یکی هستن اگه به عنوان اسم فایل استفاده بشن. خودمونی تر! تو یه فولدر نمیشه دو تا فایل رو همزمان به این دو اسم ایجاد کرد، ولی تو لینوکس میشه.
خوب، بنابراین، زمانی که مثلا تو PHP میخوایم یه فایل رو include کنیم، حتما رعایت کنیم این مساله رو و در نظر داشته باشیم که ممکنه کد ما روی لینوکس قرار بگیره،هر چند الان رو ویندوز نوشته میشه، و برعکس، یعنی به کوچکی و بزرگی اسم فایلها در ویندوز توجه کنیم و هم اینکه از این قابلیت لینوکس که فایلهای همنام ولی متفاوت از لحاظ کوچک و بزرگ بودن حروف رو میتونه کنار هم قرار بده، استفاده نکنیم، چون رو ویندوز یکی از فایلها توسط اون یکی فایل رونویس میشه.
اما مشکل اینجا یه کم بدتر هم میشه. require_once و include_once هر دو، قراره یه فایل رو هر چند بار که درخواست شد، فقط و فقط یه بار استفاده کنن. حالا فرض کنید رو ویندوز،کدی دارید به این صورت :
require_once("some_file.php");
require_once("some_file.PHP");
روی لینوکس، کلا این میگرده دنبال دو تا فایل مختلف و اگه دو فایل با این اسامی نباشه از شما خطا میگیره. اما ویندوز، اون موقع قضیه یه کم بامزه تره. فایل some_file.php دو بار (نه یک بار) require میشه، یعنی در مورد این دو تابع، بدون توجه به پلاتفرم، PHP شبیه لینوکس عمل میکنه، نه ویندوز…. حالا فرض کنید مثلا Some_file.php و SOME_file.php و…




