/*
* PHP基础语法:变量、变量类型、数据类型转换、常量
* 常用函数收集:empty(),isset(),unset(),var_dump(),gettype(),print_r()
*
*/
$a = 100; //$变量名
$a = "Hello"; //变量类型赋值后发生了变化
echo gettype($a);
ECHO "Hello World"; //内置结构和关键字以及用户自定义的类名、函数名不区分大小写。变量名区分大小写[我只能呵呵]
//可变变量
$hi = "hello";
$$hi = "world"; //可变变量$$hi, 相当于$hello = "world"
echo "$hi $hello";
echo "$hi ${$hi}"; //$$hi $hello等价
//引用赋值
$foo = 'bob';
$bar = &$foo; //&引用赋值,PHP引用并不是地址指针,只是把各自的值关联起来,unset()不会导致所有引用变量消失
$bar = 'jack';
unset($foo);
echo $bar;
/*
* 数据类型:不是由程序员设定的,由PHP根据变量使用的上下文在运行时决定的。
* 4种标量类型:boolean,integer,float,string
* 2种复合类型:array,object
* 2种特殊类型:resource,NULL
*/
//布尔型boolean:如何类型的值都可以自动转换成boolean,以下认为是FALSE,其它都是TRUE
/*
* 0或0.00为False,-1和其他非零为True
* 空白字符串和字符串"0"为False
* 没有成员变量的数组
* 特殊类型NULL,包括尚未设定的变量
*/
//整型Interge:32位平台-2147483648~2147483647,不支持无符号整数。超出范围就变成float
$int1 = 10; $int2 = 0123; $int3 = 0xFA; //十进制,八进制0开头,十六进制0x开头
//浮点数float或double, 与平台相关1.7E-38~1.7E+38,精确到小数点后15位。浮点数8内部类似7.9999999999...
$float1 = 1.234; $float2 = 1.2e3; $float3 = 7E-10; //7*10的-10次方
//字符串String:单引号、双引号、定界符
//单引号:不会解析单引号中的变量。仅能转义单引号和转义字符\本身。单引号效率高一些。
echo 'this\'s \\a simple string';
//双引号:变量名会被变量值代替,可用${}形式,可解析其它转义字符:\n, \r,\t等等
//定界符:<<
//数组Array:可以存入如何类型的数据。是一个有序图(把values映射到keys)。
$arr1 = array("foot" => "bar", 12 => true); //key可以是integer或string,value可以是任何类型
print_r($arr1);
//对象Object:由一组属性值和一组方法构成。
class Person //class前面是不能加public的,这和.NET可不同。作用域可能和导入到其他文件中有关。暂时只能满脑子???
{
public $name; //Public,Protected,Private可见性是一样的
function Say()
{
echo "Doing foo.";
}
}
$person1 = new Person(); //也是用new生成类的实例对象
$person1->name = "Tom";
$person1->Say();
echo gettype($person1->name);
//资源类型Resource:外部资源的引用,通过专门的函数来建立和使用。打开文件、数据库连接、图形画布区域等的句柄.
//据说忘记释放资源,系统自动启动垃圾回收机制
$file_handle = fopen("ttt.txt", "r");
var_dump($file_handle); //创建成功返回资源引用,创建失败返回boolean(false)
if(!$file_handle)
{
echo 'Failed to open file';
}
//NULL类型:NULL值。下列情况被认为是NULL:直接赋值了NULL, 声明变量尚未赋值, 被unset()销毁的变量
//数据类型转换:自动转换、强制转换
//自动转换:通常只有4种标量类型混合运算才会自动转换。按长度增加的方向。
/*
* True变1,False变0
* integer先转为float
* 字符串先转换为数字:字符串[最前面是]数值部分不带小数点-integer,否则-float. 不是数值开头的-0
*/
//强制类型转换:除了(int)形式外,可用转换函数:intval()、floatval()、strval()等不会改变原变量类型,只获取新值
echo (int)'a123'; //0
echo (int)'123'; //123
//settype($var, 'integer'); //改变了变量的类型
//浮点 转换 为整型,舍弃小数部分,超出整型范围,结果将不确定。NULL转换为字符串为“”。
//变量类型的测试函数:
/*
* is_bool,is_int,is_float,is_string.....
*/
//常量:作用域是全局的。只能是标量(boolean,integer,float,string)类型。定义后不能重新定义或取消定义。
//常量的定义和使用:define()函数,命名与变量一致,区分大小写,惯例是全部大写。不要$符号。defined()检查是否定义了。
//boolean define(string name, mixed value[,bool case_insensitive]); mixed-代表多种类型都可。
define("PI", 3.1415926);
//预定义常量:
echo PHP_OS;
echo PHP_VERSION;
echo DIRECTORY_SEPARATOR; //\
echo PATH_SEPARATOR; //;
echo E_ERROR; //1
echo E_WARNING; //2
echo E_PARSE; //4
echo E_NOTICE; //8
echo M_PI; //3.14159...
//魔术常量:
echo __FILE__;
echo __LINE__;
echo __FUNCTION__;
echo __CLASS__;
echo __METHOD__;