PHP中数据类型,操作符和控制结构

boolean类型

当转换为 boolean 时,以下值被认为是 FALSE: 
  1. the 布尔值 FALSE 自身 
  2. the 整型值 0 (零) 
  3. the 浮点型值 0.0 (零) 
  4. 空 字符串, 以及 字符串 "0" 
  5. 不包括任何元素的数组
  6. 不包括任何成员变量的对象(仅PHP 4.0 适用) 
  7. 特殊类型 NULL (包括尚未设定的变量) 
  8. 从没有任何标记(tags)的XML文档生成的SimpleXML 对象 
整型

所支持的最大整数与平台有关,一般是正负2的31次方。试图在PHP中超出此限制,将自动转换为浮点数

字符串

历史上,PHP将字符串看作数组,允许通过数组偏移记法访问特定的字符。例如:

$color = "maroon";
echo $color[2];    //output 'r'

类型强制转换

将整型转换为双精度浮点数
$score1 = (double)13; //$score = 13.0
var_dump($score1);    // float(13)
将双精度浮点数转换为整型,将整数值向下取整,而不考虑小数值
$score2 = (int)14.8; //$score = 14
var_dump($score2);  //int(14)
$sentence ="This is a sentence";
echo (int)$sentence; //returns 0
还可以将数据类型强制为数组中的一个成员,所转换的值将成为数组的第一个成员
$score = 1234;
$arr = (array)$score;
echo $arr[0];    //output 1234
如果将一个对象转换成对象,它将不会有任何变化。如果其它任何类型的值被转换成对象,将会实例化一个内置类  stdClass 的对象。如果该值为  NULL,则新的实例为空。数组转换成对象将使键名成为属性名并具有相对应的值。对于任何其它的值,名为  scalar 的成员变量将包含该值。
$model = "naruto";
$obj = (object)$model;
print $obj->scalar; //return "naruto"

类型的自动转换
<?php
$total = 5; //an integer
$count = "15"; //a string
$total += $count;
echo $total; // output 20
?>

<?php
$total = "23 fire engines";
$incoming = 10 ;
$total = $incoming + $total;
echo $total; //output 33
?>

如果在数学计算中用到 . ,e,E的字符串,这个字符串将作为浮点数计算
$val1 = "1.2e3"; //1,200
$val2 = 2;
echo $val1*$val2; //outputs 2400

与类型有关的函数
1.string gettype(mixed var) 8种可能的返回值:array,boolean,double,integer,object,resource,string,unknow type
2.boolean settype(mixed var,string type) type有7个可取值:array,boolean,float,integer,null,object,string
3.is_array(),is_bool(),is_float(),is_integer(),is_null(),is_numeric(),is_object(),is_resource(),is_scalar(),is_string()

引用赋值
方式一:
$value1 = "hello";
$value2 =& $value1;       //$value1 and $value2 both equal "hello"
$value2 = "googbye";    //$value1 and $value2 both equal "goodbye"
方式二:
$value1 = "hello";
$value2 =& $value1;       //$value1 and $value2 both equal "hello"
$value2 = "googbye";    //$value1 and $value2 both equal "goodbye"

变量作用域

1.局部变量
在函数中声明变量认为是局部变量,即它只能在该函数中引用。如果在函数
外赋值,将被认为是完全不同的另一个变量(即不同于函数中所包含的那个变量)
。注意,退出声明变量的函数时,该变量及相应的值就会撤销。
局部变量很有用,因为它消除了出息那意外副作用的可能性,否则,这些副作用将导致
可全局访问的变量被有意义或无意义地修改。考虑如下代码:
<?php
$x=4;
function assignx()
{
     $x =0;
     printf("\$x inside function is %d",$x);
}
assignx();
printf("\$x outside function is %d",$x);
?>
代码的执行结果为:
$x inside function is 0
$x ouside function is 4

可以看到,这里输出了两个$x值。只是因为assigns()函数内的$x是局部变量。修改局部变量的值不会对函数外部的任何值产生影响。同样地,修改函数外部的$x也不会对assignx()内的任何变量有影响

2.函数参数
PHP与其他很多编程语言一样,任何接受参数的函数必须在函数首部中声明这些参数。虽然
这些参数接受函数外部的值,但退出函数后就无法再访问这些参数。(这里只考虑值传递的参数)
//mutiply a value by 10 and return it to caller
function x10($value)
{
$value = $value*10;
return $value;
}
?>
记住,虽然在声明参数的函数内部可以访问和处理这些函数参数,但当函数执行结束,参数就会撤销

3.全局变量
与局部变量相反,全局变量可以在程序的任何地方访问。但是为了修改一个
全局变量,必须在要修改改变量的函数中将其显示地声明为全局变量。这很
容易做到,只要在变量前面加上关键字GLOBAL,这样就可以将其识别为全局
变量。如果将GLOBAL关键字发那个在一个已有的变量前面,则是告诉PHP要
使用同名的变量
<?php
$somevar = 17;
function addit()
{
GLOBAL $somevar;
$somevar++;
echo "somevar is $somevar";
    
} // end func
addit(); //output “somevar is 18”
?>
声明全局变量的另一种方法是使用PHP的$GLOBAL数组:
<?php
$somevar =17;

function addit()
{
$GLOBALS["somevar"]++;   
}
addit();
echo $somevar;
?>

4.静态变量
最后一种变量作用域为静态(static)作用域。函数参数在函数退出时会
撤销,与声明为函数参数的变量不同,静态变量在函数退出时不会丢失值
,并且再次调用此函数时还能保留这个值。在变量名前面加上关键字static就可以
声明一个静态变量
function keep_track()
{
   static $count = 0;
   $count++;
   echo $count;
   echo "<br>";

keep_track();
keep_track();
keep_track();

输出值为1 2 3
静态作用域对于递归函数很有用

PHP的超级全局变量
(要使用预定义的变量数组,必须在php.ini文件中启用配置参数track_vars。在PHP4.03中,track_vars总是启用的)

$_SERVER
包含有web服务器创建的信息,它提供了服务器和客户配置及当前请求环境的有关信息。

$_GET
包含GET方法传递的参数的有关信息,默认情况下,要访问通过GET方法传递的变量,$_GET超级全局变量是唯一的途径,不能用$cat、$id等方式引用GET变量

$_POST
默认情况下,要访问通过GET方法传递的变量,$_GET超级全局变量是唯一的途径

$_COOKIE
这些cookie一般是有以前执行的PHP脚本通过PHP函数setcookie()设置的

$_FILES
包含通过POST方法想服务器上传的数据的有关信息。这个超级全局变量与其他变量略有不同,他是一个二维数组,包含五个元素。
第一个下标表示表单的文件上传元素名;第二个下表是五个预定义下标之一,这些下标描述了上传文件的某个属性:
    $_FILES['upload-name']['name']    : 从客服端向服务器上传文件的文件名
    $_FILES['upload-name']['type']     :上传文件的MIME类型。这个变量是否赋值取决于浏览器的功能
     $_FILES['upload-name']['size']     :上传文件的大小(以字节为单位)
     $_FILES['upload-name']['tmp_name']  :上传之后,将此文件移到最终位置之前赋予的临时名
     $_FILES['upload-name']['error']     :上传状态码。
                error五个可能的值:
                UPLOAD_ERR_OK    : 文件上传成功
                UPLOAD_ERR_INI_SIZE    : 文件超出了upload_max_filesize指令指定的最大值
                UPLOAD_ERR_FORM_SIZE    : 文件大小超出了MAX_FILE_SIZE隐藏表单域参数(可选)指定的最大值
                UPLOAD_ERR_PATIAL    : 文件只上传了一部分
                UPLOAD_ERR_NO_FILE     : 上传表单中没有指定文件

$_ENV

$_REQUEST
记录了通过输入方法传递给脚本变量,特别是GET,POST,COOKIE。这些变量的顺序不依赖于它们在发送脚本中出现的顺序,而是依赖variables_order配置指令所指定的顺序,但是不推荐使用

$_SESSION

$GLOBALS
(注意美元符后面没有下划线)
$GLOBALS超级全局变量数组可以认为是超级全局变量的超集,包括全局作用域内的所有变量。执行下面代码可以查看$GLOBALS中的所有变量
print_r($GLOBALS);

变量的变量
$recipe = "spaghetti";
$$recipe = " & meatballs";
下面两行代码将得到相同的结果
print $recipe.$spaghetti;
print $recipe.${$recipe};

常量
define()

boolean define(string name,mixed value [ , bool case_insensitive])

常量引用前面不需要美元符,其次一旦定义常量,就不能重新定义或取消已定义的常量,如果需要根据常量生成一个值,这个值必须存储在另一个变量中。最后,常量是全局的,可以在脚本中的任何位置引用。


操作符


  1. @的作用是‘错误控制’
  2. <<  >> 的作用是‘左移’、‘右移’
  3. AND XOR OR    作用分别是‘布尔与’、‘布尔异或’、‘布尔或’
    这种逻辑操作符常用于提供其他运算结果的详细信息,尤其是返回值的运算:
    如:
    file_exists('mytxt.txt') OR print 'File does not exist';
    会有两种输出:
    □ 文件mytxt.txt存在
    □ File does not exist
  4. 最后一个操作符是    ,    作用是分隔表达式
  5. ++ 和--放在变量的前面和后面有区别,放在变量前边时变量先自增或自减,后参与运算,放在变量后面时变量先参与运算,或自增或自减(这里存在变量的值和表达式的值的不同)
  6. 比较操作符只能用来比较数值,虽然也可以使用这些操作符比较字符串,但很可能得不到预期的结果,应使用另一组预定义的函数进行字符串的比较
注意:
    <?php
    $j = 1; //第一行
    $j=$j++; //第二行
     echo '$j的值是'."$j"; //output    ‘$j 的值是1’
    ?>

运算顺序是:
1.第二行的$j为1;
2.由于++ 的优先级高于=,则右边的$j保持不变为1,左边的$j被自加后值为2
3.右边值为1的$j把值赋给左边的值为2的$j
4.最终$j的值为1

(最开始我一直认为$j最终值为2,主要原因是认为第二行先进行赋值运算,再进行自加,也就是对放在操作元后面的++的运算理解错误,实际上++的优先级高于= ,所以先进行++,但由于是后++,所以右面的$j仍然保持++前的值,而如果是前++,$j的值最终为2)



heredoc的用法
  1. 开始和结束标识符必须相同,标识符的限制的是必须完全由字母数字字符和下划线组成,而且不能一数字或下划线开头
  2. 开始标识符前面必须有三个做尖括号:<<<
  3. heredoc语法与双引号界定的字符串遵循相同的解析规则。即,变量和转义序列都将得到解析,唯一的区别是,此处的双引号不需要转义
  4. 结束标识符必须在一行的开始处,而且前面不能有空格或任何其他多余的字符。这通常会使用户混淆,所以,要当心确保你的heredoc字符串符合这个烦人的要求。此外,开始或结束标识符后面的任何空格都会导致语法错误
declare()和return()

include() ,require() ,include_once() ,require_once

include(/path/to/filename)
也支持包含远程服务的文件
include()语句将在其被调用的位置处包含一个文件。包含一个文件与在该语句所在位置复制指定文件的数据具有相同的结果。
与print和echo语句一样,使用include()时可以忽略括号
如:
include "/usr/local/lib/php/wjgilmore/init.php";

还可以根据条件来执行include()语句,但要注意的是在条件语句中使用include(),它必须包围在语句块大括号中,或者用其他语句包围符括起
如:
if(expression)
{
include('filename');
}else {
    include('another_filename');
}

所包含的文件中的所有代码都会继承其调用者位置处的作用域

require(filename)
和include的区别是
  1. 无论require()的位置如何,指定文件都将包含到出现require()的脚本中。例如,即使require()放在计算为假的if语句中,依然会被包含指定文件
  2. require()出错时,脚本将停止执行,而在使用include()的情况下,脚本将继续执行。


















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值