چهارشنبه ۰۸ بهمن ۱۴۰۴

Wednesday, January 28, 2026 GMT +3:30

توابع (Functions) در PHP

php-function

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

تابع (Function) چیست و چه کاربردی دارد؟


در زبان های برنامه نویسی و از جمله در PHP توابع ماشین هایی با ساختار از قبل تعریف شده (بلاکی از کدها) هستند که معمولا با دریافت مقدار یا مقادیری به عنوان ورودی پردازش های مد نظر برنامه نویس را انجام داده و در نهایت حاصل این پردازش ها به عنوان خروجی در ادامه برنامه قابل استفاده است، به این دلیل به تابع "ماشین" می گوییم چون مانند یک دستگاه مواد خام را دریافت کرده و در نهایت محصول تولید می کند و به همین جهت روندهای تکراری با نوشتن یک تابع چندین و چند بار در برنامه قابل انجام است، همچنین به این دلیل گفتیم "معمولا با دریافت مقدار یا مقادیر ورودی" چون در دنیای برنامه نویسی توابع را بدون مقدار ورودی هم می توانیم استفاده کنیم و حتی برخی توابع هیچ مقدار ورودی یا خروجی ندارند و صرفا تغییراتی در متغیرها و آبجکت ها ایجاد می کنند که همه اینها بستگی به نیاز برنامه ما دارد.

انواع مختلف تابع در PHP


در یک تقسیم بندی کلی توابع در PHP به دو صورت زیر قابل تفکیک هستند:
- توابع درونی یا از پیش تعریف شده (Predefined یا Internal (built-in) functions).
- توابع سفارشی یا تعریف شده توسط کاربر (Custom یا User-defined functions).
منظور از توابع درونی مواردی هستند که به صورت ذاتی در مفسر PHP وجود دارند و به کمک آنها می توانیم بدون نوشتن کدهای اضافه با سرعت و سهولت بیشتری روند توسعه برنامه ها را پیش ببریم، به طور مثال تابع str_replace برای جایگزینی مقادیر رشته ای با هم، تابع is_numeric برای بررسی عدد بودن یک مقدار، تابع strtolower برای تبدیل حروف بزرگ انگلیسی به شکل حروف کوچک و موارد فراوانی از این دست که در مفسر PHP از قبل تعریف شده و به همراه هسته برنامه نصب می شوند.
علاوه بر توابع درونی این قابلیت در زبان PHP وجود دارد که تابع سفارشی و شخصی تعریف کنیم، توابع شخصی معمولا با هدف اجرای بلاکی از کدها به دفعات متعدد در قسمت های مختلف برنامه نوشته می شوند و با این کار روندهای مشابه با یک بار کدنویسی چندین و چند بار قابل تکرار هستند، برای نوشتن و استفاده از توابع سفارشی باید قواعد زبان PHP را رعایت کنیم.
در ادامه آموزش ابتدا توابع سفارشی را بررسی و سپس اشاره ای به توابع درونی PHP خواهیم کرد.

شیوه نگارش (Syntax) تعریف تابع در PHP


شیوه نگارش (Syntax) تعریف توابع در PHP شباهت زیادی به دیگر زبان پرکاربرد وب یعنی جاوا اسکریپت دارد، در PHP هم برای تعریف تابع از عبارت function با نمونه فرمت زیر استفاده می کنیم:
<?php
//تعریف تابع
function boldMyText($text){
    $result = '<strong>' . $text . '</strong>';
    return $result;
}
?>
توضیح:
- توابع در PHP با عبارت function و درج نام با شرایطی که در ادامه خواهیم گفت تعریف می شوند، در قسمت () آرگیومنت ها یا همان ورودی های تابع تنظیم می شود و قسمت {} بدنه اصلی و کدهایی که باید تابع اجرا کند را دربر می گیرد، در نهایت نیز معمولا حاصل فرآیند تابع با عبارت دستوری return برگردانده می شود.
- استفاده از آرگیومنت و return در توابع اختیاری است، به عبارتی می توانیم توابعی بدون ورودی یا خروجی داشته باشیم (به فرض تابع صرفا مقدار یک متغیر یا آبجکت را در روند برنامه تغییر دهد).

قواعد نامگذاری توابع در PHP


مانند هر زبان برنامه نویسی PHP نیز از قواعد خاصی برای نامگذاری توابع پیروی می کند، در PHP نام توابعی که تعریف می کنیم می تواند در چارچوب Regex زیر عبارتی دلخواه شامل حروف و اعداد انگلیسی، کاراکتر زیرخط یا Underline "_" یا کاراکترهای non-ASCII (کاراکترهای خارج از استاندارد ASCII) باشد:
^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$
اطلاعات بیشتر در خصوص استاندارد ASCII:
asciitable.com
شروع نامگذاری تابع حتما باید با حروف یا کاراکتر _ باشد، جالب است که با توجه به پشتیبانی از یونیکد UTF-8 (عبارت زیر در دستور باقاعده بالا کاراکترهای non-ASCII را شامل می شود:)
\x80-\xff
استفاده از نام و اعداد فارسی برای تابع در PHP ممکن است، در مجموع توصیه می کنیم برای سازگاری و خواناتر شدن کدها در نامگذاری عموما از کلمات با معنی به صورت تکی یا در ترکیب با سایر کلمات و اعداد انگلیسی استفاده کنیم، به طور مثال چند نام فرضی برای توابع:
clean, changeUser, getNewResult, textType1, textType2, getParam_1, getParam_2
انتخاب نام به صورت صرفا عددی (به فرض 01234) یا دارای کارکترهای خاص (به فرض ^ * #) مجاز نیست و در صورت استفاده خطای مشابه زیر را دریافت خواهیم کرد:
Parse error: syntax error, unexpected '1' (T_LNUMBER), expecting identifier (T_STRING) or '(' in ... .php on line 2

فراخوانی توابع در PHP


برای اینکه توابع در کدها اثرگذار باشند حتما باید آنها را فراخوانی (Call) کنیم، فراخوانی توابع در کدهای PHP معمولا به صورت استفاده مستقیم و بی واسطه است با این حال به فراخور نیاز برنامه ها شیوه های دیگری نیز برای فراخوانی توابع وجود دارد که در ادامه بررسی می کنیم.
- فراخوانی تابع به صورت مستقیم
در این شیوه بسته به هدف یا خروجی که تابع بر می گرداند (رشته، عدد، مقادیر بولین و...) می توانیم از تابع به صورت مستقیم استفاده کنیم، به طور مثال نمونه کد زیر خروجی تابع را که یک رشته متنی است با دستور echo چاپ می کند:
<?php
//تعریف تابع
function boldMyText($text){
    $result = '<strong>' . $text . '</strong>';
    return $result;
}
//متغیر
$text = "این متن را برجسته کن";
//فراخوانی تابع
echo boldMyText($text);
?>
با اجرای این نمونه کد در لوکال هاست یا سرور آنلاین مقادیر متغیر text به صورت برجسته شده با تگ strong در خروجی صفحه چاپ می شود.
مثال دیگر از به کار بردن مستقیم تابع در PHP:
<?php
function checkOddEven($number){
    if($number % 2 == 0){
        return true;  
    }

    return false;
}
if(checkOddEven(2)){
    echo 'عدد زوج است';
} else {
    echo 'عدد فرد است';
}
?>
این تابع زوج یا فرد بودن عدد دریافتی را بررسی و مقادیر true یا false را به عنوان نتیجه برمی گرداند.
- اختصاص تابع به متغیر و فراخوانی با واسطه
در این شیوه ابتدا تابع را به روال متداول تعریف می کنیم و سپس برای فراخوانی نام تابع را به متغیر نسبت داده و در ادامه ی کدها متغیر را با پارامترهای مد نظرمان فراخوانی می کنیم، مثال:
<?php
function myFuncName($arg_1, $arg_2){
    if(!is_numeric($arg_1) || !is_numeric($arg_2)){
        return false;
    }
    
    return $arg_1 + $arg_2;
}
$my_var = "myFuncName";
echo $my_var(2, 4);
?>
خروجی نمونه کد بالا عدد 6 خواهد بود.
- استفاده از تابع درونی call_user_func
شیوه دیگری که PHP برای فراخوانی توابع در اختیارمان قرار می دهد استفاده از متغیر و تابع درونی call_user_func است، به طور مثال:
<?php
function myFuncName($arg_1, $arg_2){
    if(!is_numeric($arg_1) || !is_numeric($arg_2)){
        return false;
    }
    
    return $arg_1 + $arg_2;
}
$var = call_user_func("myFuncName", 2, 4);
echo $var;
?>
خروجی نمونه کد بالا عدد 6 خواهد بود.
- استفاده از تابع eval (توصیه نمی شود)
این امکان در مفسر PHP وجود دارد که یک رشته را به صورت کدهای PHP پردازش و اجرا کنیم، برای این کار تابع درونی eval کاربرد دارد، مثال:
<?php
function myFuncName($arg_1, $arg_2){
    if(!is_numeric($arg_1) || !is_numeric($arg_2)){
        return false;
    }
    
    return $arg_1 + $arg_2;
}
$var = "echo myFuncName(2, 4);";
eval($var);
?>
خروجی نمونه کد بالا عدد 6 خواهد بود.
نکته: استفاده از تابع eval به لحاظ امنیت برنامه ممکن است با خطراتی همراه باشد و بخصوص اگر قرار است که ورودی از سمت کاربر در این تابع اجرا شود باید حتما قبلا رشته ارسالی کاملا اعتبارسنجی و ایمن سازی شود.

آرگیومنت (Argument) تابع


در برنامه نویسی با زبان PHP استفاده از توابع می تواند با و بدون ورودی باشد اما معمولا توابع را با یک یا چند ورودی (جدا شده با علامت کاما ",") تعریف و به این ورودی ها در اصطلاح آرگیومنت (Argument) می گوییم، در هنگام تعریف و فراخوانی تابع بسته به هدف و نوع پردازش های مد نظر آرگیومنت ها می توانند به یکی از صورت های زیر باشند:
- فراخوانی با مقدار (Call by Value)
این حالت شیوه پیش فرض استفاده از آرگیومنت برای توابع در PHP است، در این شیوه پارامتر یا پارامترهای مد نظر به صورت متغیر بین کاراکترهای () تعریف و در هنگام فراخوانی به صورت مستقیم یا به شکل متغیر مقداردهی می شوند، مثال:
<?php
function checkValueExist($value, $array){
    if(in_array($value, $array)){
        return true;
    }
    
    return false;
}

$array = Array('A', 'E', 'G');
$value = 'R';

if(checkValueExist($value, $array)){
    echo 'مقدار ' . $value . ' در آرایه وجود دارد';
} else{
    echo 'مقدار ' . $value . ' در آرایه وجود ندارد';
}
?>
در این نمونه کد تابع فرضی checkValueExist با دو آرگیومنت تعریف شده است که پارامتر اول (value) می تواند یک رشته متنی و پارامتر دوم (array) یک آرایه باشد (در خصوص آرایه ها در مباحث آینده مفصل خواهیم گفت)، تابع مقادیر ورودی را دریافت کرده و وجود پارامتر اول را در آرایه دریافتی بررسی و در نهایت با مقادیر true یا false نتیجه را برمی گرداند و بر این مبنا می توانیم در دستور شرطی if تصمیم بگیریم که کدام قسمت از کدها اجرا شوند.
- فراخوانی با ارجاع (Call by Reference)
در حالت معمول پردازش های صورت گرفته بر مقادیر ورودی در روند تابع روی متغیرهای بیرون از تابع تاثیری ندارند، به طور مثال متغیر فرضی a در نمونه کد زیر همیشه مقدار 5  را چاپ می کند:
<?php
function doIncrement($num){
    return $num++;
}
$a = 5;
doIncrement($a);
echo $a;
?>
اما با استفاده از کاراکتر & می توانیم این حالت را تغییر داده و اثر تابع را بر روی متغیر بیرون از آن داشته باشیم، مثال:
<?php
function doIncrement(&$num){
    return $num++;
}
$a = 5;
doIncrement($a);
echo $a;
?>
خروجی این نمونه کد عدد 6 خواهد بود.
به این شیوه تعریف آرگویمنت ها با استفاده از کاراکتر &، فراخوانی با ارجاع یا Call by Reference می گوییم.
- مقادیر پیش فرض آرگیومنت ها (Default argument values)
شکل دیگر استفاده از آرگیومنت ها برای توابع تعریف آنها با مقادیر پیش فرض است، به این صورت اگر تابع را بدون آرگیومنت فراخوانی کنیم مقادیر پیش فرض جایگزین آرگیومنت می شود، مثال:
<?php
function sayWelcome($user = "Admin"){
    echo "Hi " . $user . ", Welcome to Control Panel!<br>";
}
sayWelcome();
sayWelcome("Manager");
?>
در صورت اجرای نمونه کد بالا در لوکال یا سرور خروجی زیر چاپ خواهد شد:
Hi Admin, Welcome to Control Panel!
Hi Manager, Welcome to Control Panel!
گفتیم توابع را بدون return هم می توانیم استفاده کنیم.
- لیست آرگیومنت ها با طول متغیر (Variable-length argument list)
شیوه جالب دیگر استفاده از آرگیومنت برای توابع که در PHP نسخه 5.6 و مابعد اضافه شده استفاده از عملگر سه نقطه (Splat یا Three dots Operator) و تنظیم ورودی به صورت لیست با طول متغیر است، در این شیوه تعداد آرگیومنت ها از قبل مشخص نیست و بسته به نیاز می تواند میزانی متغیر باشد، به طور مثال (کد صرفا در PHP نسخه 5.6 و مابعد قابل اجرا است):
<?php
function addNumbers(...$number){
    $result = 0;
    
    foreach($number as $key => $value){
        $result += $value;       
    }
    
    return $result;
}

echo addNumbers(1, 5, 6);
?>
خروجی نمونه کد بالا عدد 12 خواهد بود.
همان طور که مشخص است در این شیوه آرگیومنت به همراه کاراکتر سه نقطه تعریف شده و در تابع به شکل آرایه در حلقه foreach از آن استفاده کرده ایم، این شکل از استفاده از سه نقطه جهت دستیابی به مقادیر آرگیومنت را در اصطلح برنامه نویسی شیوه دسترسی به آرگیومنت های متغیر (Accessing Variable Arguments Method) می گوییم.
از سه نقطه در هنگام فراخوانی تابع هم می توانیم برای استخراج (Unpack) آرایه (یا متغیرهای Traversable یا Literal) و اختصاص به مقادیر آرگیومنت ها استفاده کنیم، البته در این حالت باید تعداد پارامترهای تابع مشخص باشد، مثال (کد صرفا در PHP نسخه 5.6 و مابعد قابل اجرا است):
<?php
function addNumbers($a, $b, $c){
    $result = $a + $b + $c;
    
    return $result;
}
$var = [1, 5, 6];
echo addNumbers(...$var);
?>
خروجی این نمونه کد هم مقادیر 12 خواهد بود.
به این شکل استفاده از سه نقطه جهت اختصاص مقادیر آرگیومنت ها را در اصطلاح برنامه نویسی شیوه مقداردهی به آرگیومنت های متغیر (Providing Variable Arguments Method) می گوییم.
نکته: مفاهیم Traversable یا Literal اصطلاحات تخصصی برنامه نویسی هستند که آموزش آنها در مرحله مقدماتی مورد نیاز نیست و در عمل هم شاید صرف این مفاهیم به خودی خود خیلی کاربردی نباشند، در همین حد بدانیم که یکی از کاربردهای کاراکتر سه نقطه می تواند با این نوع متغیرها باشد کافی است.
آخرین شکل استفاده از لیست آرگیومنت ها با طول متغیر شیوه استفاده با اشاره به نوع ورودی (Type hinted Variable Arguments Method) است، در این شیوه نام یک کلاس با فاصله قبل از کاراکتر ... قرار می گیرد و در این صورت ورودی ها الزاما باید نمونه (Instance) ای از آن کلاس باشند و در نهایت می توانیم به آبجکت های public آن کلاس در تابع دسترسی داشته باشیم، مثال:
<?php
class MyClass{
    private $var_1 = 5;
    private $var_2 = 8;
    public $myInt;
    
    function __construct($type){
        switch($type){
            case 'a':
                $this->myInt = $this->var_1;
            break;
            case 'b':
                $this->myInt = $this->var_2;
            break;
        }
    }
}

function addNumbers(MyClass ...$number){
    $result = 0;
    
    foreach($number as $key => $value){
        $result += $value->myInt;
    }
    
    return $result;
}

$a = new MyClass('a');
$b = new MyClass('b');

echo addNumbers($a, $b);
?>
خروجی مثال بالا عدد 13 خواهد بود، همان طور که مشخص است آرگیومنت های تابع از فراخوانی کلاس MyClass با دو پارامتر a و b مقداردهی و در تابع از آبجکت myInt مقادیر دریافت شده اند.
نکته: این شکل استفاده از آرگیومنت های توابع برای برنامه نویسی معمول کاربرد آنچنانی ندارد اما در برنامه نویسی پیشرفته و شی گراء ممکن است کاربردی باشد که جهت آشنایی بیشتر توضیح داده شد.

توابع درونی (Predefined یا Internal (built-in)) در PHP


در اغلب زبان های برنامه نویسی متدها و توابعی به صورت از قبل تعریف شده و آماده وجود دارد که به کمک آنها می توانیم روندهای معمول آن زبان را با سرعت و سهولت بیشتری انجام دهیم، PHP نیز از این قاعده مستثنی نیست و در هسته مفسر آن توابع درونی (Predefined یا Internal (built-in)) به تعداد خیلی زیادی جهت سرعت بخشیدن به روند کار کدنویسی از قبل تعریف شده و توسط برنامه نویسان قابل استفاده است، در لیست زیر سایت مرجع php.net این توابع و متدها را به ترتیب حروف الفبا به همراه توضیحاتی درج کرده است که مرور آنها جهت آشنایی کلی و مراجعات بعدی خالی از لطف نیست:
https://www.php.net/manual/en/indexes.functions.php
برای آشنایی بیشتر در ادامه برخی توابع درونی پرکاربرد زبان PHP را به همراه نمونه کد بررسی می کنیم.
- تابع strlen و mb_strlen
برای به دست آوردن طول رشته (تعداد کاراکتر) از تابع strlen استفاده می کنیم، حالت multi-byte این تابع برای کار با متون یونیکد مانند زبان فارسی (UTF-8) می تواند کاربرد داشته باشد، مثال:
<?php
$str = "text";
echo strlen($str);
?>
خروجی مثال بالا عدد 4 خواهد بود.
<?php
mb_internal_encoding("UTF-8");
$str = "متن";
echo mb_strlen($str);
?>
خروجی مثال بالا عدد 3 خواهد بود.
- تابع str_replace
برای جایگزینی یک مقدار رشته ای با مقادیر دیگر از تابع str_replace استفاده می کنیم، مثال:
<?php
$str = "PHP is so difficult to learn!";
echo str_replace('difficult', 'easy', $str);
?>
خروجی نمونه کد بالا به صورت زیر خواهد بود:
PHP is so easy to learn!
- تابع trim
برای حذف فضای خالی از ابتدا و انتهای رشته از تابع trim استفاده می کنیم، مثال:
<?php
$str = " PHP ";
echo strlen($str);
$str = trim($str);
echo '<br>';
echo strlen($str);
?>
خروجی مثال بالا به صورت زیر خواهد بود:
5
3
- تابع ceil
برای گرد کردن به بالای اعداد اعشاری به نزدیکترین عدد صحیح از تابع ceil استفاده می کنیم، مثال:
<?php
$num = 3.2;
echo ceil($num);
?>
خروجی مثال بالا عدد 4 خواهد بود.
floor و round دو تابع دیگر مشابه با عملکرد متفاوت در این زمینه هستند.
- تابع count
برای شمارش عناصر آرایه یا آبجکت می توانیم از تابع count استفاده کنیم، مثال:
<?php
$array = Array("a", "b");
$count = count($array);
if($count < 2){
    echo "Error!";
} else {
    echo "Ok! count array is: " . $count;
}
?>
خروجی نمونه کد بالا به صورت زیر خواهد بود:
Ok! count array is: 2
تعداد توابع درونی PHP بسیار زیاد است و در اینجا صرفا جهت نمونه و آشنایی بیشتر چند مثال ذکر شد، اما آیا باید همه این توابع را به حافظه بسپاریم؟!
جواب قطعا خیر خواهد بود، هیچ نیازی نیست لیست توابع را حفظ کنیم و چنین کاری عملا هم حداقل به راحتی ممکن نیست، کافی است در هر برنامه ای که می خواهیم بنویسیم توابع مرتبط با فرآیندهای آن برنامه را از طریق جستجو یا مراجعه به نمونه کدها و منابع مرجع پیدا، با کارکردشان آشنا شده و در نهایت در کدهایمان از آنها استفاده کنیم، البته برخی توابع PHP پرکاربرد و متداول هستند که به مرور و به صورت خودکار در ذهنمان حفظ می شوند.
دسته بندی: آموزش مقدماتی » PHP
related مطالب بیشتر:
توابع کار با آرایه در PHP - بخش سوم
دستورات شرطی (Conditional Statements) در PHP
عملگرها (Operators) در PHP
دستور switch و case در PHP
توابع کار با آرایه در PHP - بخش اول
دیدگاه
more ۷۴ دیدگاه برای این مطلب ارسال شده است.
more چینش دیدگاه ها به ترتیب از جدیدترین به قدیمی ترین است.
میثم
۱۴:۰۲ ۱۳۹۳/۰۴/۰۹
سلام خسته نباشید
من یه لیستی از تمامی توابع PHP میخواستم.
+
تابعی که بتونه بین اجرای دو خط کد وقفه ایجاد کنه چی هست؟ (مثلا تابعی داریم که دو کار انجام میده وقتی کار اول انجام شد میخوایم 1 ثانیه صبر کنه و بعد کار دوم رو انجام بده)
مرسی.
- برای مشاهده لیست توابع می توانید به سایت PHP مراجعه کنید:
http://www.php.net/manual/en/funcref.php
- انجام این کار با PHP توصیه نمی شود، PHP یک زبان سمت سرور است و معمولا باید بلافاصله پس از اجرای کدها، خروجی را به مرورگر ارسال کند، عملا نقطه وقفه یا بازگشتی وجود ندارد، هر چند می توان از sleep در حلقه استفاده کرد.
امین
۱۷:۵۳ ۱۳۹۳/۰۳/۲۰
سلام استاد
بنده از فایل کتابخانه simple_html_dom برای فراخوانی صفحه یک سایت استفاده کردم اما نمیدونم چرا بعضی از سایتها رو نوشته هاش رو به صورت فشرده نشون میده و قابل فهم نیست میشه در این مورد راهنمایی کنید که آیا درستور خاصی وجود داره تا این اطلاعات رو از حالت فشرده خارج کنم و بعد نمایش بدم یا نه؟
با تشکر
لطفا آدرس سایت مورد نظر + نمونه فایلی از کتابخانه مذکور را به صورت فشرده به ایمیل ما (موجود در بخش تماس) ارسال کنید تا بررسی گردد.
غزل
۱۰:۴۲ ۱۳۹۳/۰۲/۲۳
سلام
برای اولین بار شروع به طراحی سایت کردم (به زبان php)
سایت آزمون آنلاین هست
به یک تابع نیاز دارم که با ورود به صفحه آزمون شروع به شمارش کنه (مثلا به مدت 10 دقیقه که زمان آزمونه) با تمام شدن زمان پیغامی مبتنی بر اتمام وقت آزمون بده
برای اولین بار پروژه مناسبی را انتخاب نکرده اید! برنامه نویسی وب به ترکیبی از زبان های سمت سرور (مانند PHP) و سمت کاربر (مانند جاوا اسکریپت) نیاز دارد، با صرف استفاده از یک تابع نمی توانید به هدفتان برسید، برای این مورد هم بیشتر به جاوا اسکریپت نیاز دارید تا PHP، البته برای ساخت یک برنامه کاربردی اصول زیادی باید رعایت شوند که این نیاز به تجربه قبلی و انجام پروژه های ساده تر دارد.
مومنی موگویی
۲۲:۳۶ ۱۳۹۳/۰۲/۱۳
سلام خسته نباشید
از اینکه جواب سوالات رو میدین ممنونم بخشید odbc کارش چیه آیا توی php لازمه یا کار با پایگاه داده ها کفایت می کنه و نیازی بهش نیست ممنون
ODBC مخفف Open Database Connectivity یک API یا استاندارد تعریف شده برای ارتباط با دیتابیس های مختلف است، به طور مثال می توان کدهای PHP را با دیتابیس Access ارتباط داد، در کل این کار برای برنامه نویسی وب ضرورتی ندارد (و در عمل اکستنشن های متداول در PHP کافی خواهند بود).
mogoei
۱۲:۵۳ ۱۳۹۳/۰۲/۱۰
سلام خسته نباشید از این که جواب سوالات بنده رو میدین یک دنیا ممنون
ببخشید برای کار با فایل های پی دی اف توی پی اچ پی چکار باید کرد بنده از زمپ استفاده می کنم باید چه کار کنم
آیا استفاده از فایل های پی دی اف توی پی اچ پی کارایی داره و میشه برای یادگیری وقت گذاشت یا یادگیری کار با پی دی اف توی پی اچ پی اهمیت کمی داره ممنون
مواردی مانند کار با فایل PDF جزء ملحقات زبان های برنامه نویسی محسوب می شوند که هر برنامه نویسی به فراخور نیاز ممکن است از آنها استفاده کند، به سایت های مختلف دقت کنید، اکثر آنها از PDF به صورت سیستمی چندان استفاده ای نمی کنند (یعنی فایلی به صورت سیستمی و با کدنویسی به صورت PDF خروجی داده نمی شود) از این گذشته اگرچه PHP یک سری توابع برای کار با فایل PDF در مفسر خود دارد، اما برای پشتیبانی کامل از زبان فارسی، توصیه می کنیم از فریم ورک Zend استفاده کنید.
mogoei
۱۴:۵۰ ۱۳۹۳/۰۲/۰۹
سلام و خسته نباشید بنده از دستورات زیر استفاده کردم
<?php
$zip = zip_open("win.zip");
zip_read("win.zip");
?>
و این خطا به وجود اومده به نظر شما دلیلش چیه
Warning: zip_read() expects parameter 1 to be resource, string given in C:\xampp\htdocs\zip.php on line 3
البته هر وقت از تابع دیگه مثل zip_close هم استفاده می کنم همین خطا به وجود میاد دلیلش چیه ممنون
برای آرگومان تابع zip_read از متغیر zip استفاده کنید نه نام مستقیم فایل!
zahra
۰۱:۴۰ ۱۳۹۳/۰۱/۲۴
با سلام
من برنامه نوشته شده رو میتونم تحلیل کنم و به پاسخ برسم ولی ترتیب نوشتن برنامه رو بلد نیستم. میشه راهنماییم کنین یا یه کتاب خوب در مورد php بهم معرفی کنید.
استاندارد خاصی برای ترتیب وجود ندارد، نحوه ساختار بندی تا حدود زیادی سلیقه ای و بسته به نیاز است، اما نکته اصلی این است که اصول ساده نویسی (نوشتن کدهای قابل فهم و تحلیل)، مختصر نویسی (نوشتن حداقل کدها و استفاده به دفعات، به طور مثال نوشتن کارهای تکراری در توابع) و نظم (ایجاد ساختار منسجم) را رعایت کنید، برای رسیدن به مرحله ثبات (یعنی زمانی که به راحتی بتوانید ساختار برنامه ها را طراحی کنید) باید مدتی با برنامه های کوچکتر کار و تمرین کنید تا به مرور اشکلاتتان مشخص شود.
این موارد در کتاب ها خیلی گفته نمی شوند، به تجربه باید کسب کنید.
mogoei
۲۱:۳۸ ۱۳۹۲/۱۲/۲۳
<?php
$sockets=array();
if(!socket_create_pair(AF_INET,SOCK_STREAM, SOL_TCP, $sockets)){
echo socket_strerror(socket_last_error());
}
socket_write($sockets[0], "your text");
if(!$data=socket_read($sockets[1],strlen("your text"))){
echo socket_strerror(socket_last_error());
}
$socket1=socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$socket2=socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$socket3=socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$read=array($socket1,$socket2, $socket3);
$socketselect=socket_select($read, $write=null, $except=null, 0 );
if($socketselect!==false){
echo"your text";
}
else if($socketselect>0){

echo "your text";
}
echo"<br>";
var_dump($data);
?>
سلام بنده این کدها رو نوشتم ولی ایرورهای زیر رو می ده
Strict Standards: Only variables should be passed by reference in C:\\xampp\\htdocs\\pair sock.php on line 24
Strict Standards: Only variables should be passed by reference in C:\\xampp\\htdocs\\pair sock.php on line 24
your text
string(19) "your text"
بی زحمت می تونین دلیلش رو بگین ممنون
کدها را به صورت زیر ویرایش کنید:
$read=array($socket1,$socket2, $socket3);
$write=array();
$except=array();
$socketselect=socket_select($read, $write, $except, 0);
مقداردهی آرگومان های تابع socket_select باید خارج از آن باشد.
mogoei
۱۶:۵۲ ۱۳۹۲/۱۲/۲۳
آقا یه دنیا ممنون
mogoei
۲۲:۲۸ ۱۳۹۲/۱۲/۲۱
سلام خسته نباشید
ببخشید میشه یه مثال با تابع socket_select بزنید و اجزای این تابع رو توضیح بدین اگر زحمتی نیست می خواستم بدونم آرگومنت ها یا اجزای تابع socket_select چیا هستن و کارشون چیه اگر توضیح بدین بهتره ارادتمند شما
توابع مربوط به کار با socket ها فراوانی زیادی دارند و بدون استفاده قبلی، خیلی نمی توان دقیق راجب آنها توضیح داد، توضیح در حد اطلاعات ما:
socket_select برای کار با چند سرور (چند socket) در عین واحد و تحت پورت های متفاوت است که خود حالت خواندن، نوشتن و ... را شامل می شود، سه آرگومان اول آن به صورت آرایه است، که آرگومان اول می تواند شامل لیست socket هایی باشد که باید اطلاعات از آنها خوانده شود، آرگومان دوم لیست socket هایی است که اطلاعات در آنها نوشته می شود و آرگومان سوم موارد استثناء است!
دو پارامتر آخر نیز برای تعیین حالت timeout کاربرد دارند که میزان زمان به ثانیه برای حداکثر تاخیر در پاسخگویی را مشخص می کنند.
برای درک بهتر لطفا به راهنمای سایت PHP یا مثال های موجود در وب مراجعه کنید:
http://php.net/socket-select
۰۴:۴۸ ۱۳۹۲/۱۰/۲۵
با سلام
می خواستم کد تبدیل سایت به pdf با استفاده از php رو بدونم؟
لطفا کمکم کنید
با تشکر
برای این کار باید از فریم ورک (مانند Zend Framework) استفاده کنید.
http://framework.zend.com/manual/1.12/en/zend.pdf.html
ابوالفضل
۱۲:۳۰ ۱۳۹۲/۱۰/۲۳
سلام خیلی عالی بود مثل همیشه باز دارم مطالب سایتتون رو مرور می کنم اما با یه مشکلی برخورد کردم من در قسمت جستجوی سایتم از کد زیر استفاده می کنم تا اگر کاربر کلمه ای را اشتباه تایپ کرد پیشنهاد کلمه درست داده شود:
if(in_array('مازیارفلاحی',$searray)){
function replace($str){$str = str_replace('مازیارفلاحی','مازیار فلاحی',$str);return $str;}$fg = replace("$numekeys");
echo '<div class="tags"><center>آیا منظور شما <a href="search?words='.$fg.'">'.$fg.'</a> بود؟</center></div>';}
حالا می خوام این قسمت از سایت را به دیتابیس متصل کنم به طوری که دو تا جدول داشته باشیم یکی کلمات اشتباه و یکی کلمات درست تا این قسمت به صورت خودکار در دیتابیس جستجو کند و اگر کلمه ی اشتباه وارد شده صحیحش در دیتابیس بود خروجی دهد ممنون میشم راهنمایی بفرمایید
به نظر ابتدا باید یک پرس و جو از جدول کلمات اشتباه گرفته و وضعیت وجود کلمه جستجو شده در آن بررسی شود، اگر ردیف های برگردانده شده صفر نبود، معادل کلمه اشتباه را که باید در ستون دیگری (در همان جدول کلمات اشتباه) وجود داشته باشد با مقدار فعلی جایگزین نمود، تابع فعلی به صورت استاتیک و بر مبنای آرایه است، برای حالت خودکار باید مقادیر کلمه جستجو شده را در پرس و جو جایگزین کرده و تنها برای قسمت replace از تابع استفاده کنید.
مومني موگويي
۰۷:۳۸ ۱۳۹۲/۰۹/۰۷
سلام خسته نباشید
برای کار با فایل ها در php باید فایل مورد نظر در مسیر ریشه ای php وجود داشته باشه مثلا برای زمپ فایل باید تو مسیر
C:\xampp\htdocs
باشه یا جای دیگه چون هر وقت بنده می خواهم با توابعی مثل fopen یا fclose روی یک فایل کار کنم ارور عدم وجود فایل مربوطه رو میده
ممنون از لطفتون موفق باشید در پناه حق
برای تعریف path به فایل ها بهتر است از تابع dirname به صورت زیر استفاده کنید:
dirname(__FILE__);
این حالت آدرس مسیر منتهی به فایل حاضر را برمی گرداند، مثال:
define('PATH', dirname(__FILE__).'/');
echo PATH;
با توجه به این آدرس می توان آدرس های سطح بالا یا پائین تر را تعریف کرد، به طور مثال اگر فایل در یک دایرکتوری قبل تر از فایل حاضر باشد، می توان به این صورت به آن دسترسی داشت:
define('SUB', dirname(PATH).'/');
echo SUB;
مصطفی
۰۹:۱۳ ۱۳۹۲/۰۸/۲۷
سلام می خواستم بدونم چطور میشه در پی اچ پی یک عملیاتی رو در زمانی معین انجام داد مثلا می خوایم یه تابع 1 ساعت دیگه اجرا بشه
PHP چنین قابلیتی ندارد، باید از امکانات سرور مانند قابلیت Cron Jobs (که در cPanle وجود دارد) استفاده کنید.
مومني موگويي
۱۰:۳۴ ۱۳۹۲/۰۸/۲۱
سلام و خسته نباشید می خواستم بدونم چطور نتیجه این تابع بازگشتی 10000 میشه، می خوام مفهومش رو بدونم ممنون از لطف بی نهایتتون
function power($base, $exp)
{
if($exp){
return $base*power($base,$exp-1);
}
return 1;
}
echo power(10,4);
این تابع در یک دور تکرار تا زمانی که متغیر exp برابر true باشد (بزرگتر از صفر باشد) خودش را به صورت داینامیک فراخوانی می کند و در 4 دور نهایتا خروجی ارسال می کند (خروجی آن صفر است)، return دوم در آخرین دور تابع اجرا می شود و 1 به ابتدای چهار صفر اضافه و در نهایت عدد حاصل 10 به توان 4 را نشان می دهد!
more لطفا پیش از ارسال دیدگاه نکات زیر را مد نظر داشته باشید:
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.



 refresh
10 × 10
1 × 4
20 × 20
=