调用函数时有没有办法避免过多的参数?
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
}
但还有其他方法吗?
答案 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个参数作为一个数组,在调用时,您只需指定一个键值对值数组。实际上很不错,基于经验。