//demo01
//超全局变量:
//$GLOBALS,$_SERVER,$_GET,$_POST,$_FILES,$_COOKIE,$_SESSION,$_REQUEST,$_ENV
namespace ns1;
$sitename='php.cn';
function getinfo():string{
global $sitename;
$private=$sitename;
return $private;
}
echo getinfo().'<br>';
//另一种写法:有意思的是:可以打印一下:$GLOBALS,可以看到当前所有超全局变量;
function getinfo1(){
$private=$GLOBALS['sitename'];
return $private;
}
echo getinfo1().'<br>';
//显示当前文件名;
echo $_SERVER['SCRIPT_NAME'].'<br>';
//demo02
namespace ns2;
function test1():float{
$sum=0;
$sum++;
return $sum;
}
echo test1().'<br>';
echo test1().'<br>';
echo test1().'<br>';
namespace ns3;
$sum=0;
function test1():float{
global $sum;
$sum++;
return $sum;
}
echo test1().'<br>';
echo test1().'<br>';
echo test1().'<br>';
namespace ns4;//为了尽量不占用全局变量,ns3可以采用这样的方法:做无限分类时要用到!!!
use ns2\test1;
function test1():float{
static $sum=0;//局部静态变量;特点:只在第一次赋值时,变量被初始化,今后,再也不执行这行语句;也称:伪全局变量;作业:实现函数在被多次调用时,共享数据;
$sum++;
return $sum;
}
echo test1().'<br>';
echo test1().'<br>';
echo test1().'<br>';
//demo03
//显示所有变量过滤器:
foreach (filter_list() as $aa){
echo $aa.'===>'.filter_id($aa).'<br>';
}
$age=30;
var_dump(filter_var($age,FILTER_VALIDATE_INT,['options'=>['min_range'=>18,'max_range'=>60]]));
echo '<br>';
$email='admin@php.cn';
var_dump(filter_var($email,FILTER_VALIDATE_EMAIL));
echo '<br>';
var_dump(filter_var_array(['php',100],FILTER_VALIDATE_INT));
//检测当前url中?后面是否带外部变量:''中填写?后的键名;如:...?id=1;那么就写id;
//共5个:INPUT_GET,INPUT_POST,INPUT_COOKIE,INPUT_SERVER,INPUT_ENV
var_dump(filter_has_var(INPUT_GET,''));
echo '<br>';
//控制外部变量的取值范围(和age那个相似)
var_dump($_GET['p']);
var_dump(filter_input(INPUT_GET,'p',FILTER_VALIDATE_INT,['options'=>['min_range'=>1,'max_range'=>60]]));
echo filter_input(INPUT_GET,'p',FILTER_VALIDATE_INT,['options'=>['min_range'=>1,'max_range'=>60]])?'页码正确':'页码非法';
echo '<br>';
//同时验证多个外部变量
$args=[
'username'=>FILTER_SANITIZE_STRING,//字符串,如有html标签,则删除;
'email'=>FILTER_VALIDATE_EMAIL,//
'age'=>['filter'=>FILTER_VALIDATE_INT,'flags'=>FILTER_REQUIRE_SCALAR,'options'=>['min_range'=>18,'max_range'=>60]],
//age中:flags:年龄必须是单值标量
'blog'=>FILTER_VALIDATE_URL
];
var_dump(filter_input_array(INPUT_GET,$args));
//demo04
//打印所有常量(true参数:表示以分组形式)
print_r(get_defined_constants(true));
define('APP_PATH',__DIR__,'/app/admin');//这个定义会放到所有常量的['user']键下面
echo APP_PATH;
print_r(get_defined_constants(true)['user']);
echo '<hr>';
//定义常量:如果是数组,需要用const;
define('LECTURE','朱老师');//不能用在类中,类中必须用const;
const COURSE='php';//不能用在函数中,不能用在流程控制中,但是:const可以用在类中,创建类常量!
function test(){
echo LECTURE.'教'.COURSE.'<br>';
}
test();
class Demo{
const HELLO='alibaba.com';
}
echo Demo::HELLO.'<br>';
//demo05
const DB_LINKS=[
'host'=>'localhost',
'username'=>'root',
'password'=>'root',
'charset'=>'utf8'
];
echo '<pre>'.print_r(DB_LINKS,true).'<pre>';
$aa='LECTURE';//constant函数支持存储常量的变量,但必须以字符串存在变量中(没有引号就报错);
echo constant($aa);
echo '<br>';
//constat还能找出以空为键的常量:
define('','其实我也是一个常量');
echo constant('');
echo '当前行号'.__LINE__.'<br>';
echo '当前目录'.__DIR__.'<br>';
echo '当前文件'.__FILE__.'<br>';
function a(){
echo __FUNCTION__;
}
a();
echo '<hr>';
class D{
public function index(){
echo __METHOD__;
}
}
$m=new D();
$m->index();