Php 使用变量存储参数数据是正常做法吗?
在一些PHP示例中,我看到人们将事物分配给速记变量,然后使用速记变量。这是惯例吗?这是好的做法吗Php 使用变量存储参数数据是正常做法吗?,php,variables,Php,Variables,在一些PHP示例中,我看到人们将事物分配给速记变量,然后使用速记变量。这是惯例吗?这是好的做法吗 $name = $_POST['name']; 然后他们在这里使用$name来回显它或将它用作函数参数 另一个例子是: DEFINE('DB_USER', 'username'); mysqli_connect(DB_USER.......); 我从事php专业已经5年了 通常在获取post变量时,这是一个好主意,但更常见的是将其封装在isset三元if语句中: $name=isset($\u
$name = $_POST['name'];
然后他们在这里使用$name来回显它或将它用作函数参数
另一个例子是:
DEFINE('DB_USER', 'username');
mysqli_connect(DB_USER.......);
我从事php专业已经5年了 通常在获取post变量时,这是一个好主意,但更常见的是将其封装在isset三元if语句中:
$name=isset($\u POST['name'])$_POST['name']:false代码>
这样,如果未传递变量,则不会收到未定义变量警告
此外,它还节省了您每次键入$u POST的时间,并且有助于更好地封装代码 我从事php专业已经有5年了
通常在获取post变量时,这是一个好主意,但更常见的是将其封装在isset三元if语句中:
$name=isset($\u POST['name'])$_POST['name']:false代码>
这样,如果未传递变量,则不会收到未定义变量警告
此外,它还节省了您每次键入$u POST的时间,并且有助于更好地封装代码 优点:
- 速记变量更容易输入和记忆
- 一个速记变量可能允许一个昂贵的操作只执行一次,而不是重复多次。但是要小心过早的优化!大多数情况下,这种优化是不成熟的
- 可以使用速记变量制作副本,副本可以在不修改原始变量的情况下进行更改
- 在某些语言中,可以使用速记变量创建一个副本,即使修改了原始变量,该副本也能保证持久存在
缺点:
- 不加区分地使用速记变量可能会导致相同值的多个名称
- 在某些语言和情况下,速记变量会使用额外的资源生成不必要的副本
优点:
- 速记变量更容易输入和记忆
- 一个速记变量可能允许一个昂贵的操作只执行一次,而不是重复多次。但是要小心过早的优化!大多数情况下,这种优化是不成熟的
- 可以使用速记变量制作副本,副本可以在不修改原始变量的情况下进行更改
- 在某些语言中,可以使用速记变量创建一个副本,即使修改了原始变量,该副本也能保证持久存在
缺点:
- 不加区分地使用速记变量可能会导致相同值的多个名称
- 在某些语言和情况下,速记变量会使用额外的资源生成不必要的副本
编写代码时最重要的事情是编写可读的代码,不仅是为他人编写,也是为自己编写。我们一直在这样做,即抽象和应用oo编程方法。
因此,预定义我们将要使用的变量并设置默认值非常有意义
我会这样做
class ValueTooLong extends Exception {}
function R($param, $default=null, $type='string', $max_length=null) {
if(!isset($_REQUEST[$param]))
return $default;
$r = $_REQUEST[$param];
if($max_length && strlen($r) > $max_length)
throw new ValueTooLong('Length of '.$param.' was '.strlen($r).'. Max length is: '.$max_length);
if($type === 'bool' || $type === 'boolean') {
if($r === 'false' || $r === 'no')
return false;
return !empty($r);
}
settype($r, $type);
return $r;
}
# Which allows me do do this:
$name = R('name');
# or:
$count = R('count', 1, 'int');
编辑:函数现在接受一个max_length参数(如注释所示),并在请求参数的值太长时抛出一个异常编写代码时最重要的事情是编写可读的代码,不仅是为他人编写,也是为自己编写。我们一直在这样做,即抽象和应用oo编程方法。
因此,预定义我们将要使用的变量并设置默认值非常有意义
我会这样做
class ValueTooLong extends Exception {}
function R($param, $default=null, $type='string', $max_length=null) {
if(!isset($_REQUEST[$param]))
return $default;
$r = $_REQUEST[$param];
if($max_length && strlen($r) > $max_length)
throw new ValueTooLong('Length of '.$param.' was '.strlen($r).'. Max length is: '.$max_length);
if($type === 'bool' || $type === 'boolean') {
if($r === 'false' || $r === 'no')
return false;
return !empty($r);
}
settype($r, $type);
return $r;
}
# Which allows me do do this:
$name = R('name');
# or:
$count = R('count', 1, 'int');
EDIT:函数现在接受一个max_length参数(如注释所示),如果请求参数的值太长,就会抛出一个异常是的,完全正常。第二个示例中有一个常量,而不是变量。为什么人们不直接使用它,而不是将其分配给另一个变量?很抱歉,我在问为什么人们选择这样做而不是直接使用价值观,但我不知道怎么问。变量和常量!就个人而言,$name=$\u POST['name']
是不允许的,因为您正在对已经存在的内容进行“复制”。但是,DEFINE('DB_USER','username')
非常完美,因为这是一个常量,应该定义一次(在单独的PHP脚本上),并在需要时包含在PHP中(使用require_once('name of script with constants'))
。这还允许仅在一个位置快速更改用户名
或密码
。是的,非常正常。第二个示例中有一个常量,而不是变量。为什么人们不直接使用它,而不是将其分配给另一个变量?很抱歉,我想问人们为什么选择这样做而不是使用值直接的,但我不知道怎么问。变量和常量!就我个人而言,$name=$\u POST['name']
是不可以的,因为你正在“复制”已经存在的东西。但是,定义('DB\u USER','username')
非常完美,因为这是一个常量,应该定义一次(在单独的PHP脚本上)并在需要时包含在PHP中(带有require\u once('带有常量的脚本名称')
。这还允许只在一个位置快速更改用户名
或密码
。创建数据副本是否浪费时间?是否会复制内存?当您将数据分配给name时,php会在$\u POST变量中存储指向数据的指针。我知道php不会让您访问指针,而是在引擎盖下是的。检查“tim”对此帖子的回答:我宁愿使用null而不是false来表示变量尚未设置。true/false应该用于布尔变量。您可以在那里使用任何您想要的。这取决于您的代码如何工作。是w吗