ini_set("display_errors",true);//设置在页面显示错误
error_reporting(E_ALL);//设置错误级别,设置为全部显示
//变量
//命名规则,变量的命名以$符号开头,$紧跟其后的第一个字符应该以字母或下划线
//变量名区分字母大小写,在第一个字符之后可以是数字、字母以及下划线
//变量名正则表达方式为'[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'
//插言:声明变量最好的方式,就是直接给变量直接赋值
//PHP文档中写到过,原理不怎么懂,可能因为步骤多,但结果和过程都一样,后期回头看
$_02 = 'a';
// $12_ac = 'b';错误操作,不能以数字作为变量名的开头,
$var = 'c';
$Var = 'd';
// echo $var;
// echo "
";
// echo $Var;//变量区分大小写,$var和$Var是两个变量
$var_1 = $var;
// echo $var_1;
$var_1 = 'e';
// echo
$var.'---'.$Var;//变量$var_1在被赋值的后,改变后不影响从前的原始变量$var
//听说过写实复制,不知道是不是就体现在这里
//但当上述的$var_1 = &$var这样表达的时候,改变其中一个变量,都会改变原来的值
//引用赋值&
$name_var = "yan";
$word = &$name_var;
$word = "my name is
$word";
// if ($word == $name_var){var_dump($name_var);}//这里输出my name is yan
//$word在引用$name_var之后,改变了原始的$name_var
// 有一点重要事项必须指出,那就是只有有名字的变量才可以引用赋值。
$foo = 25;
$fooo = &$foo;
$fooo = 100;
// echo $foo;
// $bar = &(24 * 7);//语法错误
function example(){
return 50;
}
// $err = &example();//notice错误,但下边可以输出,使用引用变量的时候,不能使用没有名字的变量来作为被引用的值
// echo $err;
// $this = 'text'; // error,$this是特定的变量,用于类中表示自己
// $name = 'this';
// $$name = 'text'; // sets $this to 'text',这样也不可以
//+++++++++++++++++++++++++++++++++++++++++++
//预定义变量 +++++
//+++++++++++++++++++++++++++++++++++++++++++
//在php中,有一些预定义变量在命令行运行时并不能生效
//在php内register_globals默认时off影响预定义变量在全局范围内的有效性
//为了得到 DOCUMENT_ROOT 的值,将必须使用 $_SERVER['DOCUMENT_ROOT'] 代替
$DOCUMENT_ROOT
//虽然不能直接访问,但可以使用php内置的预定义数组来访问,这些数组在全局范围内都可以生效,被称为自动全局变量或超全局变量
//php中没有自定义超全局变量的机制
//变量范围(变量的作用域)
$a = 12;//
//在用户自定义函数中,一个局部函数范围将被引入。任何用于函数内部的变量按缺省情况将被限制在局部函数范围内。例如:
function test(){
global
$a;//2、但使用global声明为全局变量时,在调用函数,将使用上边的$a
$a = 23;//此处赋值后,函数不调用,$a不会被改变,一点调用函数test,$a的值也会被改为23
echo $a;//1、这个$a被php作为按照缺省情况,来限制在局部函数范围内,并不和上文的$a存在联系
}
// test();//没有global修饰将报错,如果被global修饰后,将等同于上文的$a
// echo $a;//函数调用的时候,并用global修饰函数内的$a时,$a被改变
//在C语言中,全局变量可以在函数内直接调用,但是在php中,想要在函数内部调用全局变量,就要在函数内部的变量前面用global来修饰
// var_dump($GLOBALS);打印全局变量
//静态变量,静态变量只存在于局部函数作用域中,当程序执行完之后,静态变量的值不丢失
function staticFunc()
{
$b = 0;
echo $b;
$b++;
}
function staticFunc2()
{
static $b = 0;
echo $b;
$b++;
}
// staticFunc();//不管调用多少次,函数执行完之后,$b被销毁,再次调用,$b初始值还会是0
//
staticFunc2();//调用了之后,静态变量$b不会消失,而是存在静态内存段中,在接下来每次调用的时候,$b都不会重置为0,此次输出结果为0
// staticFunc2();//输出结果为1
//测试自加自减
function staticFunc3()
{
$b = 0;
echo
++$b;//先++后使用,输出1
echo
$b++;//先被echo使用,后++输出1
echo $b;//输出2
}
// staticFunc3();
function staticFunc4()
{
$b = 0;
echo
--$b;//先--后被echo使用,输出-1
echo
$b--;//先输出-1,后--,此操作之后,$b变为-2
echo $b;//输出-2
}
// staticFunc4();
//静态变量与递归函数
function recursiceFunc(){
static $count = 0;
$count++;
echo $count;
if ($count <10) {
recursiceFunc();
}
// $count--;
// echo $count;
}
// recursiceFunc();//做递归的时候,一定要有充分的条件来停止递归运算
//递归的运算规律是从内向外运算的,内部运算结束后,才会返回上一级调用
//在函数中,不能让用表达式的方式来个静态变量赋值,比如static $a = 1+2;是错误的方式,php解析错误
// 在函数之外使用 global
关键字不算错。可以用于在一个函数之内包含文件时。意思是说,在函数之外可以使用global关键在来
//修饰一个变量,但是没有意义,因为函数之外的变量,本身就具有全局性,但是如果一个函数需要引用一个文件,这个文件内有一个变量,
//在函数外需要用到,那此时在这个被引入的文件内的变量要拥有全局性,就该使用global
//static的变量和global的变量都是属于变量的引用&,更改了值,源有的值也一起改变
class sample_class
{
public function
func_having_static_var($x = NULL)
{
static $var = 0;
if ($x === NULL)
{ return $var; }
$var = $x;
}
}
$a = new sample_class();
$b = new sample_class();
// echo $a->func_having_static_var()."\n";
// echo $b->func_having_static_var()."\n";
// // this will output (as expected):
// 0
// 0
// $a->func_having_static_var(3);
// echo $a->func_having_static_var()."\n";
// echo $b->func_having_static_var()."\n";
// 3
// 3
//可变变量以及可变函数
//可变变量的概念,就是一个$后边跟随着一个会变的名称,比如$$a,这时候,给$a不同的值,那$$a的变量名也不会相同
//可变变量与数组
$a = 'hello';
$e = 'cd';//字符串在php内部以数组形式表达,所以也可以用数组的方式来访问字符串内部的字符
$hello = ['as','de'];
$de = 'i am last
word';
echo ${${$a}[1]};
//在对数组做可变变量的时候,需要考虑一个问题,因为当给$$a[1]做可变变量时,需要告诉php,是给$a[1]的字符做可变变量,
//还是给$$a下的1做变量,区分两种方式是用{}括起来,前一种情况${$a[1]},后一种为${$a}[1]
//实际的用处很给力,可以减少很多操作
//1、当我们接受一个表单提交时,有post过来的值,可以这样做来代替成堆的$_POST出现
foreach($_POST as $key=>$value){
$$key=$value;
}
//这样对应$_POST下的所有$key的值就都做好赋值了,记得要做好过滤
//可变函数,可变函数也是拿表单提交来距离,前端传一个class的名,和一个function的名
//我们可以这样来实例化一个类以及调用方法,$foo = new
$_GET['classname']();$foo->$_GET['funcname']();
//注意:在 PHP 的函数和类的方法中,超全局变量不能用作可变变量。$this
变量也是一个特殊变量,不能被动态引用。