بایگانی برای مرداد

phpتابعی – قسمت ۱ – Anonymous functions در php5.3

پنجشنبه, ۲۹ مرداد ۱۳۸۸

Anonymous functions

What are Anonymous Functions and Closures?

Anonymous function ها که با نام closure ها نیز شناخته میشن بهمون اجازه میده توابعی بدون نام بسازیم و اونها رو تو متغیر ها بریزیم یا به عنوان CallBack ازشون استفاده کنیم و حتی میشه از تابعی دیگه اونها رو بازگشت داد . البته فقط در php 5.3 .
اونهایی که از جاوا اسکریپت استفاده می کنن حتما بارها از توابع بدون نام استفاده کردن.

<?php
echo preg_replace_callback('~-([a-z])~', function ($match) {
    return strtoupper($match[1]);
}, 'hello-world');
// outputs helloWorld
?>
<?php
$lambda = function() {
            echo "I am an anonymous function,
                  aka a lambda!<br />";
            };//متغیر با یک تابع بی نام مقدار دهی میشه
$anonymousFunction = $lambda; //تابع بی نام به متغیر دیگه ای نیز اختصاص میدیم دقیقا مثل یک رشته
$anonymousFunction();
// Output: I am an anonymous function, aka a lambda!

function nCallsTo($n, $function) {
    for($i = 0; $i < $n; $i++) {
        $function();
    }
    return function() { echo "I am also an anonymous function!<br />"; };
    //یک تابع بی نام توسط تابعی دیگه بازگشت داده میشه
}

$anotherAnon = nCallsTo(3, $anonymousFunction);
// Output:
// I am an anonymous function, aka a lambda!
// I am an anonymous function, aka a lambda!
// I am an anonymous function, aka a lambda!

$anotherAnon();
// Output: I am also an anonymous function!
?>

توابع بی نام دست برنامه نویسهای php رو برای استفاده از high-order function باز میزاره.nCallsTo دقیقا یک تابع high-order است.این نوع توابع یک کار از ۲ کار زیر رو حتما باید انجام بدن:
۱)تابعی رو به عنوان ورودی گرفته ۲)یک تابع رو برگشت بدن

از این تکنیک (توابع high-order ) میشه دقیقا در داخل دستور map / reduce استفاده کرد.نکته اینه که lambda و توابع بی نام دقیقا یک چیز هستند :توابع می تونن [داخل | مقدار] یک متغیر باشند.

اگر توابع [ یک مقدار | مقدار یک متغیر ] باشند،php نوعشونو چی تشخیص میده؟

<?php
<?php
$lambda = function() { echo "anonymous function"; };
echo gettype($lambda) . '<br />';
// Output: object
echo get_class($lambda) . '<br />';
// Output: Closure
?>

dojo.formToQuery

سه شنبه, ۲۷ مرداد ۱۳۸۸

یکی از راههای ارسال مقادیر فرم ، استفاده از متد GET . و اگه برای ارسال مقادیر با متد GET در صفحاتی که به صورت ای جکس نوشته شده باشه مصر باشیم باید تمام node های یک فرم را اسکن کرده و با تابع encodeURI انکد کنیم.

تابع formToQuery دوجو دقیقا همین کارو انجام میده یعنی ID یک فرمو میگیره و مقداریو بر میگردونه که دقیقا GET میشه.نقطه قوتش اینه که از ورودی های hidden و آرایه ها و … کاملا پشتیبانی میکنه.

try it:

تشخیص درخواست های ajax در php

جمعه, ۹ مرداد ۱۳۸۸

همیشه نوشتن صفحاتی که هم از URL و هم از طریق فانکشن کار کنه لذت بخشه.چون با چند خط اضافه کد نوشتن میتونیم از آپلود و ویرایش کردن صفحات مختلف جلوگیری کنیم.البته در بعضی از اوقات  صفحات فقط باید از طریق درخواست های ajax پاسخگو باشند،در این مواقع میتونیم برای دفع کنجکاوی های (حملات) نه چندان مهم از هدرها استفاده کرد.

[HTTP_X_REQUESTED_WITH] => XMLHttpRequest

if( isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&
strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
/* special ajax here */
}

تشخیص حروف فارسی در جاوا اسکریپت

یکشنبه, ۴ مرداد ۱۳۸۸

در جاوا اسکریپت برای ساختن الگویی از کاراکترها از RegExp استفاده میکنیم که از یونیکد نیز پشتیبانی می کند،دیروز منبعی پیدا کردم که رنجی از کدهای حروف زبانهای مختلف لیست کرده بود.

کد حروف عربی (فارسی):۰۶۰۰-۰۶FF.

Regular Expression: Match Unicode Block Range

Try It:

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<script>
function findPersianChar(obj){
	var patt1=new RegExp("[\u0600-\u06FF]");
	if(patt1.test(obj.value)==true){
		alert('i found');
	}else{
		alert('i cant found');
	}
}
</script>
</head>
<body>
	<textarea id="text" name="text"></textarea>
	<br/>
	<button onclick="findPersianChar(getElementById('text'));" >click me</button>
</body>
</html>