我在每个文件的顶部都有以下代码运行。我需要 if 语句吗?我已经使用这个实现很长时间了,很可能是在我第一次学习时获得的。我现在的理解是,我不需要 if 语句,但我想澄清一下这是否是一种好的做法。
<?php
// Inialize session
if (!isset($_SESSION)) {
session_start();
}
严格来说,if
确实不是必需的。但是,我想说无论如何保持if
是一种很好的做法。
毕竟,isset
是一种语言结构,而session_start
是一个函数调用。函数调用比语言构造慢,无论你怎么看它。
通过添加if (isset($_SESSION))
检查,您可以避免调用像 session_start
这样的函数,或者像其他人建议的那样session_id
或session_status
太多次。
只需查看语句,并计算函数调用:
if (isset($_SESSION))
//if, language construct
//isset, language construct
//$_SESSION, lookup of super-global
//----------------------------------
//Total function calls: 0
与以下相比:
if (session_status() == PHP_SESSION_NONE)
//if, language construct
//session_status(), function call
//PHP_SESSION_NONE, lookup of global, predefined constant
//----------------------------------------------------------
//total function calls: 1
当然,还有:
if(session_id() == '')
//if, lang construct
//session_id(), function call
//'' string consant
//-------------------------------
// 1 function call
在所有 3 种情况下,如果当if
的计算结果为 true,则会进行session_start
函数调用。您现在拥有的将导致一次函数调用 1 次,替代方案将导致一次两次函数调用,然后每次调用 1 个函数。
就个人而言,我敦促您研究避免所有这些session_start
电话需求的方法。任何像样的框架,通过.htaccess
重写规则,都设法通过单个入口点引导所有请求(大多数情况下,这是一个index.php
文件)。在那里,您可以致电session_start
.然后,其他脚本不必为这样的代码而烦恼。
您可以使用这些方法中的任何一种来代替您的代码。最好检查会话是否设置。这将有助于防止不需要的函数调用。一次检查比一次不需要的函数调用更好,因此您可以减少执行时间
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
或
if(session_id() == '') {
session_start();
}
你的 if 语句是不必要的。
要检查会话是否已启动,请执行以下操作:
if(session_id() == '') {
//not started
session_start();
}
else {
// session has been started
}