01-01-2014، 04:02 PM
(آخرین ویرایش: 24-01-2014، 06:10 PM، توسط Mohsen Omidvar.)
بعد از مدتها کار با php ممکنه هنوز توابعی باشن که باهاشون برخورد نکردیم و نمیدونیم چنین توابعی هم وجود دارن که میتونن کار
مارو راحتتر کنن.در زیر اشاره ای میکنم به برخی از توابع مفیدی که ممکنه خیلی ها هنوز بهش بر نخورده باشن.
توابعی با تعداد آرگومانهای دلخواه
ممکنه قبلا شما توابعی نوشته باشین که به تعداد دلخوله میتنین آرگومان بهش پاس بدین اما تابعی توی php وجود داره که به شما
اجازه میده توابعی بسازید که تعداد آرگومانها به صورت واقعی دلخواه هستند.
در ابتدا یک مثال از تابعی میزم که میتونه تعداد آرگومانهای دلخواه رو بهش پاس بدید
در این تابع شما میتونید یک ، دو آرگومان رو ببه تابع پاس بدید.حتی میتونید هیچ آرگومانی رو به تابع نفرستید که هیچ اشکالی نداره اما بیشتر از ۲ تا آرگومان رو اگر به تابع پاس بدیم داخل تابع نمیتونیم از آرگومان سوم استفاده کنیم.میبینیم که این روش هم محدودیتهای خودش رو داره.
اما حالا از تابع func_get_args()استفاده میکنیم :
حالا شما با تابع func_get_args() به تعداد دلخواه میتونید به توابعتون آرگومان بفرستید و توی تابع ازش استفاده کنید.
مقدار حافظه استفاده شده :
وقتی شما بدونید که برنامه ای که نوشتید چقدر از فضای حافظه رو اشغال میکنه بهتر میتونید برنامه خودتون رو بهینه کنید.
پی اچ پی یک مدیریت حافظه و GC قوی داره.مقدار فضایی که اسکریپت شما در حافظه اشغال میکنه میتونه روی سرعت اجرای برنامه
تاثیر گذار باشه.ما میتونیم از تابع memory_get_usage() برای مقدار حافشه مصرفی و از تابع memory_get_peak_usage() برای اطلاع
از بیشترین حافظه مصرفی در اسکریت استفاده کنیم.
مقدار استفاده از CPU
برای اینکار از تابع getrusage() استفاده میکنیم.اسن تابع روی سرور های ویندوز جواب نمیده.
ثابتهای جادویی!
Php از ثابتهای بسیار مفیدی استفاده میکنه که در زیر یه تعدادی رو براتون میذارم :
__LINE__ خط فعلی برنامه
__FILE__ مسیر فایل
__DIR__ مسیر دایرکتوری فایل جاری
__FUNCTION__ نام تابع جاری
__CLASS__ نام کلاس جاری
__METHOD__ نام متد جاری
__NAMESPACE__ فضای نام جاری
ساخت یک شناسه منحصر به فرد :
گاهی اوقات ممکنه شما بخواید یک رشته منحصر به فرد درست کنید.پی اچ پی یک تابع با نام uniqid() برای همین کار در اختیار ما گذاشته :
اگر توجه کنید میبینید که ابتدای رشته های ایجاد شده مثل هم هستند.این به دلیله که تابع uniqid() برای ساخت چنین رشته هایی از زمان سیستم استفاده میکنه.
برای اینکه امکان شباهت دوتا رشته رو کم کنیم میتونیم یک پیشوند به تابع پاس بدیم.
آیا تا حالا نیاز داشتید که یک متغیر پیچیده رو توی فایل یا دیتابیس ذخیره کنید؟ لازم نیست با یک راه حل فانتزی یک آرایه رو به رشته قالب بندی شده تبدیل کنید.بااستفاده از تابع serialize() وunserialize() به راحتی میتونید این کارو انجام بدید :
این دوتا تابع از توابع بومی پی اچ هستن.اما از وقتی که JSON مجبوب تر شده دوتاتابع دیگه هم به پی اچ پی اضافه شد که json_enphp() و json_dephp() نام دارن که توابع بسیار مفیدی هستند.
این توابع خیلی بهتر از دوتا تابع قبلی هستن چون با جاوااسکریپت و بیشتر زبانهای برنامه نویسی دیگه سازگارن.
۸-فشرده سازی رشته ها
وقتی بحث از فشرده سازی میشه ما معمولا فایلها به ذهنمون میاد.این امکان در پی اچ پی وجود داره که بشه رشته هارو به حالت فشرده در آورد.
در مثال زیر ما از دوتا تابع gzcompress() و gzuncompress() برای این کار استفاده میکنیم :
با این توابع ما میتونیم حدود ۵۰% از حجم یک رشته رو کم کنیم.همچین توابع gzenphp() و gzdephp()با یک الگوریتم دیگه میتونن همین مقدار از حجم رشته هارو فشرده کنن.
register_shutdown_function()
تابع register_shutdown_function() میتونید تعیین کنید قبل از اینکه اسکریپت شما به اتمام برسه چه تابعی اجرا بشه.اما اگر اسکریپت شما با دستور exit به پایان برسه یا یک خطا رخ بده ویا برنامه به وسیله کاربر متوقف بشه (باکلیک روی دوکمه stop مرورگر )
مارو راحتتر کنن.در زیر اشاره ای میکنم به برخی از توابع مفیدی که ممکنه خیلی ها هنوز بهش بر نخورده باشن.
توابعی با تعداد آرگومانهای دلخواه
ممکنه قبلا شما توابعی نوشته باشین که به تعداد دلخوله میتنین آرگومان بهش پاس بدین اما تابعی توی php وجود داره که به شما
اجازه میده توابعی بسازید که تعداد آرگومانها به صورت واقعی دلخواه هستند.
در ابتدا یک مثال از تابعی میزم که میتونه تعداد آرگومانهای دلخواه رو بهش پاس بدید
کد php:
// function with 2 optional arguments
function foo($arg1 = '', $arg2 = '') {
echo "arg1: $arg1n";
echo "arg2: $arg2n";
}
foo('hello','world');
/* prints:
arg1: hello
arg2: world
*/
foo();
/* prints:
arg1:
arg2:
*/
اما حالا از تابع func_get_args()استفاده میکنیم :
کد php:
view sourceprint?
// yes, the argument list can be empty
function foo() {
// returns an array of all passed arguments
$args = func_get_args();
foreach ($args as $k => $v) {
echo "arg".($k+1).": $vn";
}
}
foo();
/* prints nothing */
foo('hello');
/* prints
arg1: hello
*/
foo('hello', 'world', 'again');
/* prints
arg1: hello
arg2: world
arg3: again
*/
مقدار حافظه استفاده شده :
وقتی شما بدونید که برنامه ای که نوشتید چقدر از فضای حافظه رو اشغال میکنه بهتر میتونید برنامه خودتون رو بهینه کنید.
پی اچ پی یک مدیریت حافظه و GC قوی داره.مقدار فضایی که اسکریپت شما در حافظه اشغال میکنه میتونه روی سرعت اجرای برنامه
تاثیر گذار باشه.ما میتونیم از تابع memory_get_usage() برای مقدار حافشه مصرفی و از تابع memory_get_peak_usage() برای اطلاع
از بیشترین حافظه مصرفی در اسکریت استفاده کنیم.
کد php:
echo "Initial: ".memory_get_usage()." bytes n";
/* prints
Initial: 361400 bytes
*/
// let's use up some memory
for ($i = 0; $i < 100000; $i++) {
$array []= md5($i);
}
// let's remove half of the array
for ($i = 0; $i < 100000; $i++) {
unset($array[$i]);
}
echo "Final: ".memory_get_usage()." bytes n";
/* prints
Final: 885912 bytes
*/
echo "Peak: ".memory_get_peak_usage()." bytes n";
/* prints
Peak: 13687072 bytes
*/
برای اینکار از تابع getrusage() استفاده میکنیم.اسن تابع روی سرور های ویندوز جواب نمیده.
کد php:
print_r(getrusage());
/* prints
Array
(
[ru_oublock] => 0
[ru_inblock] => 0
[ru_msgsnd] => 2
[ru_msgrcv] => 3
[ru_maxrss] => 12692
[ru_ixrss] => 764
[ru_idrss] => 3864
[ru_minflt] => 94
[ru_majflt] => 0
[ru_nsignals] => 1
[ru_nvcsw] => 67
[ru_nivcsw] => 4
[ru_nswap] => 0
[ru_utime.tv_usec] => 0
[ru_utime.tv_sec] => 0
[ru_stime.tv_usec] => 6269
[ru_stime.tv_sec] => 0
)
*/
Php از ثابتهای بسیار مفیدی استفاده میکنه که در زیر یه تعدادی رو براتون میذارم :
__LINE__ خط فعلی برنامه
__FILE__ مسیر فایل
__DIR__ مسیر دایرکتوری فایل جاری
__FUNCTION__ نام تابع جاری
__CLASS__ نام کلاس جاری
__METHOD__ نام متد جاری
__NAMESPACE__ فضای نام جاری
کد php:
// this is relative to the loaded script's path
// it may cause problems when running scripts from different directories
require_once('config/database.php');
// this is always relative to this file's path
// no matter where it was included from
require_once(dirname(__FILE__) . '/config/database.php');
گاهی اوقات ممکنه شما بخواید یک رشته منحصر به فرد درست کنید.پی اچ پی یک تابع با نام uniqid() برای همین کار در اختیار ما گذاشته :
کد php:
// generate unique string
echo uniqid();
/* prints
4bd67c947233e
*/
// generate another unique string
echo uniqid();
/* prints
4bd67c9472340
*/
برای اینکه امکان شباهت دوتا رشته رو کم کنیم میتونیم یک پیشوند به تابع پاس بدیم.
کد php:
// with prefix
echo uniqid('foo_');
/* prints
foo_4bd67d6cd8b8f
*/
// with more entropy
echo uniqid('',true);
/* prints
4bd67d6cd8b926.12135106
*/
// both
echo uniqid('bar_',true);
/* prints
bar_4bd67da367b650.43684647
*/
7-Serialization
کد php:
// a complex array
$myvar = array(
'hello',
42,
array(1,'two'),
'apple'
);
// convert to a string
$string = serialize($myvar);
echo $string;
/* prints
a:4:{i:0;s:5:"hello";i:1;i:42;i:2;a:2:{i:0;i:1;i:1;s:3:"two";}i:3;s:5:"apple";}
*/
// you can reproduce the original variable
$newvar = unserialize($string);
print_r($newvar);
/* prints
Array
(
[0] => hello
[1] => 42
[2] => Array
(
[0] => 1
[1] => two
)
[3] => apple
)
*/
کد php:
// a complex array
$myvar = array(
'hello',
42,
array(1,'two'),
'apple'
);
// convert to a string
$string = json_enphp($myvar);
echo $string;
/* prints
["hello",42,[1,"two"],"apple"]
*/
// you can reproduce the original variable
$newvar = json_dephp($string);
print_r($newvar);
/* prints
Array
(
[0] => hello
[1] => 42
[2] => Array
(
[0] => 1
[1] => two
)
[3] => apple
)
*/
۸-فشرده سازی رشته ها
وقتی بحث از فشرده سازی میشه ما معمولا فایلها به ذهنمون میاد.این امکان در پی اچ پی وجود داره که بشه رشته هارو به حالت فشرده در آورد.
در مثال زیر ما از دوتا تابع gzcompress() و gzuncompress() برای این کار استفاده میکنیم :
کد php:
$string =
"Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Nunc ut elit id mi ultricies
adipiscing. Nulla facilisi. Praesent pulvinar,
sapien vel feugiat vestibulum, nulla dui pretium orci,
non ultricies elit lacus quis ante. Lorem ipsum dolor
sit amet, consectetur adipiscing elit. Aliquam
pretium ullamcorper urna quis iaculis. Etiam ac massa
sed turpis tempor luctus. Curabitur sed nibh eu elit
mollis congue. Praesent ipsum diam, consectetur vitae
ornare a, aliquam a nunc. In id magna pellentesque
tellus posuere adipiscing. Sed non mi metus, at lacinia
augue. Sed magna nisi, ornare in mollis in, mollis
sed nunc. Etiam at justo in leo congue mollis.
Nullam in neque eget metus hendrerit scelerisque
eu non enim. Ut malesuada lacus eu nulla bibendum
id euismod urna sodales. ";
$compressed = gzcompress($string);
echo "Original size: ". strlen($string)."n";
/* prints
Original size: 800
*/
echo "Compressed size: ". strlen($compressed)."n";
/* prints
Compressed size: 418
*/
// getting it back
$original = gzuncompress($compressed);
register_shutdown_function()
تابع register_shutdown_function() میتونید تعیین کنید قبل از اینکه اسکریپت شما به اتمام برسه چه تابعی اجرا بشه.اما اگر اسکریپت شما با دستور exit به پایان برسه یا یک خطا رخ بده ویا برنامه به وسیله کاربر متوقف بشه (باکلیک روی دوکمه stop مرورگر )
کد php:
view sourceprint?
$start_time = microtime(true);
register_shutdown_function('my_shutdown');
// do some stuff
// ...
function my_shutdown() {
global $start_time;
echo "execution took: ".
(microtime(true) - $start_time).
" seconds.";
}
*شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
خورشید باش که اگر خواستی بر کسی نتابی نتوانی.