认识php的变量类型

最近为了修改模板,开始一点点地看php的源码.这是我接触的第一种网络编程语言,和我擅长的C++要相差很远.初次接触,让我吃惊的是,尽管猜到了变量是以$开头的,却竟然找不到它的类型定义!hoho,有意思.然后就从网上搜到php教程,大概了解一下:

PHP 支持八种原始类型.
四种标量类型: boolean(布尔型), integer(整型), float(浮点型, 也作”double”), string(字符串)
两种复合类型: array(数组),object(对象),
最后是两种特殊类型: resource(资源),NULL
还有一些伪类型: mixed, number, callback

变量的类型通常不是由程序员设定的,是由 PHP 根据该变量使用的上下文在运行时决定的.

boolean值:
以下值被认为是 FALSE:
布尔值 FALSE
整型值 0(零)
浮点型值 0.0(零)
空白字符串和字符串 “0″
没有成员变量的数组
没有单元的对象(仅适用于 PHP 4)
特殊类型 NULL(包括尚未设定的变量)
所有其它值都被认为是 TRUE(包括任何资源).

整型:
整型值可以用十进制,十六进制或八进制符号指定,前面可以加上可选的符号(- 或者 +).
如果用八进制符号,数字前必须加上 0(零),用十六进制符号数字前必须加上 0x.
如果向八进制数传递了一个非法数字(即 8 或 9),则后面其余数字会被忽略.
如果给定的一个数超出了 integer 的范围,将会被解释为 float.
PHP 不支持无符号整数.
PHP 中没有整除的运算符.1/2 产生出 float 0.5.可以总是舍弃小数部分,或者使用 round() 函数.
决不要将未知的分数强制转换为 integer,这样有时会导致意外的结果.

  1. <?php
  2. echo (int) ( (0.1+0.7) * 10 ); // 显示为 7, 因为浮点结果内部表示为7.9999...
  3. ?>

字符串
string 是一系列字符.在 PHP 中,字符和字节一样,也就是说,一共有 256 种不同字符的可能性.这也暗示 PHP 对 Unicode 没有本地支持.请参阅函数 utf8_encode() 和 utf8_decode() 以了解有关 Unicode 支持.
一个字符串变得非常巨大也没有问题,PHP 没有给字符串的大小强加实现范围.
字符串可以用三种字面上的方法定义. 单引号 双引号 定界符
单引号
指定一个简单字符串的最简单的方法是用单引号(字符 ‘)括起来.
要表示一个单引号,需要用反斜线(\)转义.
单引号字符串中出现的变量和转义序列不会被变量的值替代.
双引号
和c++等语言类似
定界符
定界符语法(”<<<").应该在 <<< 之后提供一个标识符,然后是字符串,然后是同样的标识符结束字符串.

  1. $str = <<<EOD
  2. Example of string
  3. spanning multiple lines
  4. using heredoc syntax.
  5. EOD;

结束标识符必须从行的第一列开始.结束标识符所在的行不能包含任何其它字符,可能除了一个分号(;)之外.这尤其意味着该标识符不能被缩进,而且在分号之前和之后都不能有任何空格或制表符.同样重要的是要意识到在结束标识符之前的第一个字符必须是你的操作系统中定义的换行符.
不能用定界符语法初始化类成员.用其它字符串语法替代.
变量解析
当用双引号或者定界符指定字符串时,其中的变量会被解析.有两种语法,一种简单的和一种复杂的.
简单语法
如果遇到美元符号($),解析器会尽可能多地取得后面的字符以组成一个合法的变量名.如果想明示指定名字的结束,用花括号把变量名括起来.
同样也可以解析数组索引或者对象属性.对于数组索引,右方括号(])标志着索引的结束.对象属性则和简单变量适用同样的规则,尽管对于对象属性没有像变量那样的小技巧.
复杂(花括号)语法
用此语法可以在字符串中包含任何在名字空间的值.仅仅用和在字符串之外同样的方法写一个表达式,然后用 { 和 } 把它包含进来.因为不能转义”{”,此语法仅在 $ 紧跟在 { 后面时被识别(用”{\$”或者”\{$”来得到一个字面上的”{$”).
访问和修改字符串中的字符
字符串中的字符可以通过在字符串之后用花括号指定所要字符从零开始的偏移量来访问和修改.
字符串可以用”.”(点)运算符连接.注意这里不能用”+”(加)运算符.

数组
PHP 中的数组实际上是一个有序图.图是一种把 values 映射到 keys 的类型.此类型在很多方面做了优化,因此可以把它当成真正的数组来使用,或列表(矢量),散列表(是图的一种实现),字典,集合,栈,队列以及更多可能性.因为可以用另一个 PHP 数组作为值,也可以很容易地模拟树.
定义 array()
可以用 array() 语言结构来新建一个 array.它接受一定数量用逗号分隔的 key => value 参数对.
key 可以是 integer 或者 string.如果键名是一个 integer 的标准表达方法,则被解释为整数(例如 “8″ 将被解释为 8,而 “08″ 将被解释为 “08″).key 中的浮点数被取整为 integer.PHP 中没有不同的数字下标和关联下标数组,数组的类型只有一种,它可以同时包含整型和字符串型的下标.
如果对给出的值没有指定键名,则取当前最大的整数索引值,而新的键名将是该值加一.如果指定的键名已经有了值,则该值会被覆盖.(自 PHP 4.3.0 起,如果给一个当前最大键名是负值的数组添加一个新值,则新生成的的索引将为零(0).)
不能用数组和对象作为键名.这样做会导致一个警告:Illegal offset type.
如果给出方括号但没有指定键名,则取当前最大整数索引值,新的键名将是该值 + 1.如果当前还没有整数索引,则键名将为 0.如果指定的键名已经有值了,该值将被覆盖.这里所使用的最大整数键名不一定当前就在数组中.它只要在上次数组重新生成索引后曾经存在过就行了.
unset() 函数允许取消一个数组中的键名.要注意此时数组将不会重建索引.重建索引:array_values();
foreach 控制结构是专门用于数组的.它提供了一个简单的方法来遍历数组.详细见此:http://cn2.php.net/manual/zh/control-structures.foreach.php
关于数组的其他详细介绍,可以到这个页面:http://cn2.php.net/manual/zh/language.types.array.php

对象
要初始化一个对象,用 new 语句将对象实例到一个变量中.

  1. <?php
  2. class foo
  3. {
  4.    function do_foo()
  5.    {
  6.        echo "Doing foo.";
  7.    }
  8. }
  9.  
  10. $bar = new foo;
  11. $bar->do_foo();
  12. ?>

类似c++中的类和对象概念.

资源
资源是一种特殊变量,保存了到外部资源的一个引用.资源是通过专门的函数来建立和使用的.

NULL
特殊的 NULL 值表示一个变量没有值.NULL 类型唯一可能的值就是 NULL.
在下列情况下一个变量被认为是 NULL:被赋值为 NULL,尚未被赋值,被 unset().
NULL 类型只有一个值,就是大小写敏感的关键字 NULL.

伪类型
mixed
mixed 说明一个参数可以接受多种不同的(但并不必须是所有的)类型.
例如 gettype() 可以接受所有的 PHP 类型,str_replace() 可以接受字符串和数组.
number
number 说明一个参数可以是 integer 或者 float.
callback
有些诸如 call_user_function() 或 usort() 的函数接受用户自定义的函数作为一个参数.Callback 函数不仅可以是一个简单的函数,它还可以是一个对象的方法,包括静态类的方法.
一个 PHP 函数用函数名字符串来传递.可以传递任何内置的或者用户自定义的函数,除了 array(),echo(),empty(),eval(),exit(),isset(),list(),print() 和 unset().
一个对象的方法以数组的形式来传递,数组的下标 0 指明对象名,下标 1 指明方法名.
对于没有实例化为对象的静态类,要传递其方法,将数组 0 下标指明的对象名换成该类的名称即可.
一个callback实例:

下载: test.php
<?php
 
/* Create new object of class */
$ses_class = new session () ;
 
/* Change the save_handler to use the class functions */
session_set_save_handler ( array ( & $ses_class , ' _open ' ) ,
                        
array ( & $ses_class , ' _close ' ) ,
                        
array ( & $ses_class , ' _read ' ) ,
                        
array ( & $ses_class , ' _write ' ) ,
                        
array ( & $ses_class , ' _destroy ' ) ,
                        
array ( & $ses_class , ' _gc ' )) ;
 
/* Start the session */
session_start () ;
 
class session
{
  
/* Define the mysql table you wish to use with
       this class, this table MUST exist. */

  
var $ses_table = " sessions " ;
 
  
/* Change to 'Y' if you want to connect to a db in
       the _open function */

  
var $db_con = " Y " ;
 
  
/* Configure the info to connect to MySQL, only required
       if $db_con is set to 'Y' */

  
var $db_host = " localhost " ;
  
var $db_user = " username " ;
  
var $db_pass = " password " ;
  
var $db_dbase = " dbname " ;
 
  
/* Create a connection to a database */
  
function db_connect () {
   ............
  
}
 
  
/* Open session, if you have your own db connection
       code, put it in here! */

  
function _open ( $path , $name ) {
   .............
  
}
 
  
/* Close session */
  
function _close () {
   ..............
  
}
 
  
/* Read session data from database */
  
function _read ( $ses_id ) {
   .................
  
}
 
  
/* Write new data to database */
  
function _write ( $ses_id , $data ) {
   ...........
  
}
 
  
/* Garbage collection, deletes old sessions */
  
function _gc ( $life ) {
   ............
  
}
}
?>

以上内容在http://cn2.php.net/manual/zh/language.types.php的基础上收集整理。

code, php

你可能感兴趣的:(编程,PHP,.net,mysql)