在php中调用函数时如何避免过多的参数

时间:2013-06-02 04:28:41

标签: php

调用函数时有没有办法避免过多的参数?

Eg:
function myFunction($usrName,$usrCountry,$usrDOB//and many more){
    // Do something with all those arguments here
}

我这样做的一种方法是定义常量

//After thorough checking

$sesUserName = $_SESSION['sesUserName'];

define('USERNAME', $sesUserName);

myFunction(){
    // Do something with USERNAME here
    // No need to use USERNAME when calling the function
}

但还有其他方法吗?

5 个答案:

答案 0 :(得分:4)

一种方法是开始使用OOP程序并创建用户对象。这将允许您将用户用作单个实体,而不是任意一组属性或常量。

<?php 

   class User {
        public $name;
        public $country;
        public $dateOfBirth;
        // for stuff that a user does or is define as instance methods
        public function isUserOver18(){
            return time() < strtotime("+18 years", strtotime($dateOfBirth));
        }
   }

   $user = new User();
   $user->name = $data["name"];
   $user->country = $data["country"];
   $user->dateOfBirth = $data["dob"];

   if ($user->isUserOver18()){
       // show page
   } else {
       echo "You must be 18 years or older to view this video";
   }

   // for stuff that is done to a user pass it in as an argument. 

   notifyUser($user, "You've got mail");

答案 1 :(得分:2)

而不是创造需要你传递大量参数的巨大功能。了解面向对象编程,并创建一个PHP类。

我保证,一旦你学习了这些技巧,你就会看到完全不同的编程。您可以为经常执行的操作创建可重用的类,例如数据库操作,用户管理系统等等。

使用对象和类进行掌握是平庸程序员与优秀程序员之间的区别。

Here is a good beginner tutorial on object oriented programming in PHP

答案 2 :(得分:0)

您可以传递一组参数:

function myFunction($arrayArgs){
    if(is_array(arrayArgs){
        if(!array_key_exists('usrName', $arrayArgs)){
            return null;
        }

        if(array_key_exists('usrCountry', $arrayArgs)){
            return null;
        }

        //and many other ifs
    }
}

答案 3 :(得分:-1)

那些所有需要的参数吗?您可以将1个数组作为包含所有必需键的参数。

例如:function myFunc($arr),数组为array('user_name' => '', 'user_country' => '',...)

答案 4 :(得分:-1)

Zend Framework 1.x实际上具有处理参数的非常好的实现。规则很简单。如果您需要3个或更少的参数,只需直接指定即可。但是,当您已经需要3个以上时,您需要将第3个参数作为一个数组,在调用时,您只需指定一个键值对值数组。实际上很不错,基于经验。