1

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

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
}

但是还有其他方法可以做到这一点吗?

4

5 回答 5

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");
于 2013-06-02T04:44:03.420 回答
2

而不是创建需要您传入大量参数的巨大函数。了解面向对象编程,并创建一个 PHP 类。

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

掌握使用对象和类是普通程序员与优秀程序员的区别。

这是一个很好的 PHP 面向对象编程初学者教程

于 2013-06-02T04:43:00.403 回答
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
    }
}
于 2013-06-02T04:33:02.853 回答
0

这些参数都是必需的吗?您可以将 1 个数组作为具有所有必需键的参数。

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

于 2013-06-02T04:33:27.143 回答
0

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

于 2013-06-02T04:45:56.967 回答