变量作用域
<?php
//超全局变量不需要定义/初始化。$GLOBALS $名称;
$siteName="这是一个名称";
// 全局变量会自动注册也为超全局变量数组$GlOBALS的一个值
// 超全局变量不受作用域限制
print_r ($GLOBALS['$siteName']);
//声明函数,创建作用域
function getInfo(){
//定义函数为私有变量:$private
//使用超全局变量
$private=$GLOBALS['$siteName'];
//函数直接访问超全局变量
echo $_SERVER['SCRIPT_NAME'];
//返回
return $private;
}
getInfo();
echo "<hr>";
// 直接输入
echo $_SERVER['SCRIPT_NAME'];
echo "<hr>";
静态变量和动态变量区别
<?php
//1.动态变量:也叫私有变量
//namespace表示命名空间
//同一个文件允许有多个命名空间,但是不允许有同一个函数
namespace ns1;
function test():float
{
//在动态变量中,每次使用都会初始化。
$sum=0 ;
$sum = $sum + 1;
return $sum;
}
//所以输出不管多少次结果,都是初始化的那个结果就是$sum+1的结果”1“,
echo test()."<br>";
echo test()."<br>";
echo test()."<br>";
echo "<hr>";
#全局变量
namespace bb;
$sum=0;
function test():float
{
global $sum;
$sum=$sum+1;
return $sum;
}
echo test()."<br>";
echo test()."<br>";
echo test()."<br>";
echo "<hr>";
//局部变量:只在函数被调用才初始化,更新一次就不更新了
//静态变量:可理解为“伪全局变量”
//实现函数多次调用共享数据
namespace cc;
function test():float{
static $sum;
$sum=$sum+1;
return $sum;
}
echo test()."<br>";
echo test()."<br>";
echo test()."<br>";
echo "<hr>";
//变量本质:数据共享
//函数本质:代码共享
$num=50;
echo ($num+1)."<br>";
echo $num+2;
变量过滤器
<?php
//filter_list返回包含所有得到支持的过滤器的一个数组
//$filter过滤器
foreach (filter_list() as $filter){
//该函数的结果不是过滤器 ID,而是过滤器名称。请使用 filter_id() 函数来获取过滤器 ID。
echo $filter.'=>'.filter_id($filter)."<br>";
}
echo '<hr>';
//打印出过滤器名称(不包含ID)
print_r(filter_list());
echo '<hr>';
//过滤单个变量使用filter_var;
$age=60;
if(filter_var($age,FILTER_VALIDATE_INT)):
echo "是个整数";
endif;
echo '<hr>';
//限制范围
if(filter_var($age,FILTER_VALIDATE_INT,['options'=>['min_range'=>10,'max_range'=>50]])):
echo $age;
else:
echo "输入有误";
endif;
echo '<hr>';
$email='123@qq.com';
var_dump(filter_var($email,FILTER_VALIDATE_EMAIL));
echo '<hr>';
var_dump(filter_var($email,247));
echo '<hr>';
//过滤多个变量filter_var_array()
var_dump(filter_var_array([100,'php',FILTER_VALIDATE_INT]));
echo '<hr>';
//检测是否存在外部变量filter_has_var()
//如URL的$_GET提交参数:123.com/index.php?id=1&name=admin
//提交参数方式:INPUT_GET,INPUT_POST,INPUT_COOKIE,INPUT_SEVER,INPUT_ENV
//示例:127.0.0.1/index.php?p=1
var_dump(filter_has_var(INPUT_GET,'page'));
echo 'get变量='.$_GET['P'];
echo '<hr>';
//过滤外部变量filter_input。进行限制=>1
var_dump(filter_input(INPUT_GET,'P',FILTER_VALIDATE_INT,['options'=>['min_range'=>1]]));
echo '<hr>';
//验证多个外部变量filter_input_array()
$args = [
'username'=> FILTER_SANITIZE_STRING,
'username'=> FILTER_SANITIZE_STRING,
'email'=> FILTER_VALIDATE_EMAIL,
'age'=> ['filter'=> FILTER_VALIDATE_INT,'flags'=> FILTER_REQUIRE_SCALAR,'options'=> ['min_range'=>10]],
'blog'=>FILTER_VALIDATE_URL,
];
var_dump(filter_input_array(INPUT_GET,$args));
常量不需要更新数据
<?php
//打印出当前系统有哪些常量
//print_r(get_defined_constants());
//可以分组查看
//print_r(get_defined_constants(true));
define('APP_PATH',__DIR__.'/app/admin/');
echo APP_PATH;
print_r(get_defined_constants(true)['user']);
定义常量 。 常量请使用””或者’’包起来。
<?php
//define()函数
define('LECTRUE','老张');
const COURES='php';
//常量不受作用域限制
function test(){
echo LECTRUE."教我们学".COURES."<br>";
define('SEX','男性');
echo SEX;
}
test();
echo "<hr>";
//在流程控制中,difine可以用。const不能用
if(true){
define('EMAIL','123QQ.COM');
}
echo EMAIL;
echo "<hr>";
//const在类中,创建类常量。
class demo{
const TITLE="php中文网";
//define不可以在类使用
//define('A',100);
}
echo demo::TITLE;
//echo demo::A;
//常量通常只允许用标量进行初始化
//标量:单值变量,字符串,数值,布尔,NULL
//PHP7.0+支持数组初始化常量
const DB_LINKS=[
'host'=>'localhost',
'name'=>'root',
'password'=>'root',
'db'=>'test',
'charset'=>'utf8',
];
echo '<pre>'.print_r(DB_LINKS,true).'</pre>';
//返回一个常量的值使用constant()
echo constant("LECTRUE");
echo LECTRUE."<BR>";
$mail2='EMAIL';
echo constant($mail2);
echo "<br>";
define('','我是个空常量');
echo '';
//constant可以输出空值常量
echo constant('');
define('A','定义常量我才能显示');
echo A;
魔术常量
<?php
echo '当前代码的行号是:'.__LINE__."<BR>";
echo '当前文件的绝对路径和文件名称是:'.__FILE__.'<BR>';
echo '当前文件所在目录是:'.__DIR__."<br>";
echo '当前文件目录和文件'.__DIR__.'/demo6.php';
echo '<hr>';
//使用魔术常量显示当前函数名称
function test(){
echo __FUNCTION__;
}
test();
echo '<hr>';
class D{
public function index(){
echo __METHOD__;
}
}
(new D)->index();
总结:初学者一定要多注意符号不要写出了,即使是对照的抄,一不小心也会出错。只要多多写下代码,我相信也一定可以学到的。在学习过程中,也除了抄,还可以尽量的去尝试下其他方式方法!