`

认识php的变量类型

    博客分类:
  • Code
阅读更多

最近为了修改模板,开始一点点地看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实例:

<?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的基本语法

    认识PHP的基本语法 数据类型 数值 字符串 数组与哈希表 对象 改变变量类型 变量与常量 运算符 控制流程结构 函数 类 PHP正则的规则 更多电子书

    认识并使用PHP超级全局变量

    认识并使用PHP超级全局变量 超级全局变量也叫做预定义变量,是PHP系统中自带的变量,它可让你的程序设计更加的方便快捷。它的类型包括: $GLOBALS 包含一个引用指向每个当前脚本的全局范围内有效的变量。该数组的键...

    PHP5与MySQL5从入门到精通.rar

    2.2 数据类型 2.2.1 布尔型 2.2.2 整型 2.2.3 浮点型 2.2.4 字符串 2.2.5 数组 2.2.6 对象 2.2.7 资源 2.2.8 NULL 2.2.9 类型转换 2.3 变量 2.3.1 变量的赋值 2.3.2 预定义变量 2.3.3 变量作用域 ...

    php&mySQL;完全实例教程

    第3章到第7章将介绍PHP作为一种程序设计语言的基本规则,如数据类型、控制语句、函数和对象等。第8章将对PHP的内部函数库作一个比较全面的介绍,以方便用户的查询使用。第9章介绍MySQL数据库的一些基本内容以及它与...

    【计算机专业php毕业设计】基于php+mysql学生成绩查询(系统)-附源码.zip

    着时代的进步,网络的应用已经相当普及,人们也认识到...其次,介绍了教材管理系统,MYSQL数据库,包括MYSQL数据库数据类型和数据表,对MYSQL数据库数据操作的核心概念,即数据的添加、删除、修改和查询进行了简单的介绍。

    基于php+mysql的学生成绩查询系统(含源码).zip

    其次,介绍了教材管理系统,MYSQL数据库,包括MYSQL数据库数据类型和数据表,对MYSQL数据库数据操作的核心概念,即数据的添加、删除、修改和查询进行了简单的介绍。 关键词: PHP, MySql, Apache, 数据库,数据库实现...

    php学生成绩查询-课设

    着时代的进步,网络的应用已经相当普及,人们也认识到...其次,介绍了教材管理系统,MYSQL数据库,包括MYSQL数据库数据类型和数据表,对MYSQL数据库数据操作的核心概念,即数据的添加、删除、修改和查询进行了简单的介绍。

    学生成绩查询-php+mysql

    随着时代的进步,网络的应用已经相当普及,人们也认识到...其次,介绍了教材管理系统,MYSQL数据库,包括MYSQL数据库数据类型和数据表,对MYSQL数据库数据操作的核心概念,即数据的添加、删除、修改和查询进行了简单的介绍。

    PHP教材管理系统设计(源代码+论文).zip

    其次,介绍了教材管理系统,MYSQL数据库,包括MYSQL数据库数据类型和数据表,对MYSQL数据库数据操作的核心概念,即数据的添加、删除、修改和查询进行了简单的介绍。 关键词: PHP, MySql, Apache, 数据库,

    php+mysql学生成绩信息管理系统(源码+数据库)

    其次,介绍了教材管理系统,MYSQL数据库,包括MYSQL数据库数据类型和数据表,对MYSQL数据库数据操作的核心概念,即数据的添加、删除、修改和查询进行了简单的介绍。 关键词: PHP, MySql, Apache, 数据库,

    php+mysql学生成绩查询系统.zip

    摘 要 着时代的进步,网络的应用已经相当普及,人们也...其次,介绍了教材管理系统,MYSQL数据库,包括MYSQL数据库数据类型和数据表,对MYSQL数据库数据操作的核心概念,即数据的添加、删除、修改和查询进行了简单的介绍。

    php高校教材管理系统

    其次,介绍了教材管理系统,MYSQL数据库,包括MYSQL数据库数据类型和数据表,对MYSQL数据库数据操作的核心概念,即数据的添加、删除、修改和查询进行了简单的介绍。 在电子计算机技术发展日新月异的今天,计算机技术、...

    php+mysql学生成绩查询系统(源代码+论文).rar

    着时代的进步,网络的应用已经相当普及,人们也认识到...其次,介绍了教材管理系统,MYSQL数据库,包括MYSQL数据库数据类型和数据表,对MYSQL数据库数据操作的核心概念,即数据的添加、删除、修改和查询进行了简单的介绍。

    用php和MySql来与ODBC数据连接

    ODBC 是指开放数据连接,它是微软主导的数据驱动程序,它可以与其它数据连接,通过SQL语言来对数据进行操作的,当然PHP也提供了对ODBC数据连接的函数, 用PHP与ODBC连接主要通过几个函数来完成的, 首先先来认识几个与ODBC...

    PHP基础知识100问

    php常见问题,常见基础知识问答,让初学者对php有一个基本认识。

    思库教育PHP零基础培训+进阶课程+PHP项目开发实战 21G PHP零基础学习视频教程.txt

    │ │ └[思库教育]php 第13集 其它数据类型介绍.avi │ ├ │ │ ├[思库教育]php 第14集 .数据类型转换.avi │ │ └[思库教育]php 第15集 流程控制语句.avi │ ├ │ │ ├[思库教育]php 第16集 找出100之内的...

    精通sql结构化查询语句

    1.5 SQL开发环境 1.5.1 SQL环境介绍 1.5.2 SQL的层次结构 1.5.3 SQL环境中的对象 1.5.4 SQL环境中的程序系统 1.6 SQL语句基础 1.6.1 SQL常量 1.6.2 SQL表达式 1.6.3 SQL数据类型 1.6.4 注释符 1.6.5 批处理 1.6.6 ...

    Wordpress 插件开发视频教程( 高清 720P )

    11. 后台整合:元数据框.mp4 文件大小:104,361 KB 12. 后台整合:自定义插件界面.mp4 文件大小:51,371 KB 13. 如何保存插件设置.mp4 文件大小:97,428 KB 14. 如何使用API保存插件设置.mp4 文件大小:129,185 ...

    送强力打狗棒,文末领取

    例如安全狗iis版,只知道要防护的服务器是iis作为中间件,并不知道要防护的服务器上面部署的数据库类型[Mysql|Sql Server|Access..]以及脚本语言类型[php|aspx|asp...]。再者,由于是依靠正则规则看恶意代码,所以对...

Global site tag (gtag.js) - Google Analytics