• 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
چک کردن نوع ورودی به تابع
#1
Question 
سلام
برای چک کردن نوع ورودی ها به تابع راه های مختلفی هست ، اما بهترین راه کدام است ؟

کد پی‌اچ‌پی:
if ( (int)$num == $num && (int)$num 

کد پی‌اچ‌پی:
filter_var($valueFILTER_VALIDATE_INT, array(
    
'options' => array('min_range' => 1)
)); 

کد پی‌اچ‌پی:
if(!ereg('^[0-9]+$'$value)) {
  
$errors .= "This is not a positive whole number";


کد پی‌اچ‌پی:
if(!is_int($number_of_children)) { die("Form input was not an integer. Please return to the form and try again."); } 

کد پی‌اچ‌پی:
if (isset($_GET['start']) && is_numeric($_GET['start'])){
     
$start intval($_GET['start']);


مثلا برای یک تابع که پست را از طریق آیدی پیدا می کند و این مقدار بوسیله GET به تابع وارد می شود باید چه تمهیداتی در نظر گرفت ؟

کد پی‌اچ‌پی:
public function post_id($id) {
//؟؟؟
 

  پاسخ
تشکر شده توسط :
#2
اینم به نظرم تابع خوبیه :‌

کد:
function system_CleanVars(&$global, $key, $default = '', $type = 'int')
{
    switch ($type) {
        case 'array':
            $ret = (isset($global[$key]) && is_array($global[$key])) ? $global[$key] : $default;
            break;
        case 'date':
            $ret = (isset($global[$key])) ? strtotime($global[$key]) : $default;
            break;
        case 'string':
            $ret = (isset($global[$key])) ? filter_var($global[$key], FILTER_SANITIZE_MAGIC_QUOTES) : $default;
            break;
        case 'int': default:
            $ret = (isset($global[$key])) ? filter_var($global[$key], FILTER_SANITIZE_NUMBER_INT) : $default;
            break;
    }
    if ($ret === false) {
        return $default;
    }
    return $ret;
}
ما توی سیستم زوپس به طور کلی از این برای همه جا استفاده میکنیم.
مثلا اینطوری :

کد:
$verif_htmlbanner = system_CleanVars($_POST, 'htmlbanner', 0, 'int');
  پاسخ
تشکر شده توسط : ali786
#3
طبیعتاً استفاده از typecasting (مثل int یا bool...) خیلی به صرفه تر و سریعتر از توابع (مثل is_int) هستن - جواب اولی و دومی

در مورد توابع is_int و is_numeric و is_float تفاوت در حوزه پوششی شون هست
is_int هرگز 9999999999 و '12345' و 1.444 رو integer نمی دونه و FALSE بر می گردونه - یعنی حوزش عدد خالص + و - با طول 9
در صورتی که is_numeric همه رو عدد می دونه و TRUE بر می گردونه


voltan تابعی که شما دادید ورودی رو فیلتر می کنه، نه چک.
بدرد هم نمی خوره Big Grin
وبلاگ: Yousha.Blog.ir


 کد کمتر => خطای کمتر => قابل فهمتر => خوانایی بالاتر => نگهداری بهتر

  پاسخ
تشکر شده توسط : ali786 cyletech Reza
#4
من یه راه بهتر سراغ دارم. از کامپوننت های فیلتر یه فریم ورک خوب مثل زند (چشم بد خواهاش کور شه ایشاالله Cool ) استفاده کن. بصرفه تره تا اینکه بخوای خودت یه چیزی بنویسی. بد نیست البته کامل بدونی ولی برای توسعه وقتت رو روش نذار
غایب
  پاسخ
تشکر شده توسط : Reza ali786


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان