博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP语法特点
阅读量:6863 次
发布时间:2019-06-26

本文共 3907 字,大约阅读时间需要 13 分钟。

我的主攻是C, C++,之前也学过 Python, Lua 脚本语言,没有接触过PHP。这几天在学习PHP,做个笔记。 

感觉PHP在语法上与C++特别相似。只要会C++,PHP基本上不用记什么。 
语法上有这些特点: 

1. 数据类型

    null, bool, string, float, integer, array, object

    object 是 new 出来的对象

    转换类型与 C 一样。

2. PHP里所有的变量名都是以 $ 开头 

    在Shell里,只有获取变量的时候才需要加$符号,在PHP里,所获取还是设置都要加 $ 符号

$str = "hello";echo $str;

3. PHP里变量名区分大小写,函数名不分

$str = "String\n";$STR = "This is STR\n";echo $str;ECho $str;echo $STR;

    结果输出:

String

String
This is STR

4. PHP里的注释除了C++有的 // /**/ 外,还有脚本常用的 #

// 注释/* * 注释 */# 注释

5. 定义变量时无需指明类型

    这点与 python, lua一样,这也是大多数据脚本的共性。

6. 数据组是 array

    用作数组时:

$arr = array("C++", "C", "Java", "PHP");

    用作映射表时:
$map = array("John"=>"M", "Lily"=>"F");

  

如果不指定键值,那么它就是数字 0,1,2,3...为键。如果指定了键值,那就以指定的键值为键。

    其功能非常类似于Lua的表。Lua的如下:

w = {x=0, y=0, label="console"}

  不过 Lua 的有点怪异,非得从1开始计数。

7. 逻辑语句与C++一样

    if .. else if .. else, for, while, continue, break等与C++一样。只不过,PHP还支持用 : ... endXXX 来代替 { ... }

if ($num == 0) {    echo "num = " . $num;}# 也可以写成如下if ($num == 0) :    echo "num = " . $num;endif

    有 ++$i 与 $i++,与C++一样。

8. 字符串用 . 进行连接

    这一点跟 Lua 类似,Lua 是用 .. 进行字符串拼接的。

9. 字符串用单引号或双引号界定

$name = 'Peter';echo 'My name is $name\n';echo "My name is $name\n";echo "===="

My name is $name\nMy name is Peter

====

    在单引号里 $name 与 \n 都没有被重新计算。而双引号则会被替代。这点跟shell一样。

10. 有 === (恒等)与 !== (不恒等)比较。恒等的意思是不仅值相等,类型还一样

11. 函数的定义

function PrintName($name = "Unknow") {    if (is_string($name)) {        echo "My name is $name\n";        return TRUE;    }    return FALSE;}PrintName("Hevake");

    与 Lua 类似,也可以带默认值

12. 常量

define("NAME", "hevake_lcj");    # 定义常量echo constant("name");    # 取常量if (defined("name")) {    # 检查是否定义了常量 name    echo "定义了 name";}

13. 可变变量

';$b = 'a';echo $$$b;?>

   

    $text, $$a, $$$b的结果都是“My Name”。

    函数也可以这样引用:

";}function back() { echo "I am back.
";}$func = "come";$func();$func = "back";$func();?>

14. 预定义环境变量

    $_SERVER, $_COOKIE, $_SESSION, $_POST, $_GET, $GLOBALS

15. 函数可以以引用传参

在函数外:\$m = $m

";?>

16. foreach循环

18, 'licy'=>22);foreach ($map as $key=>$value) { echo "$key=>$value, ";}echo '
';?>

17. 面向对象与Java类似

mID = static::$sCount++; #注意静态成员的引用方法 echo "Student $this->mID construct
"; $this->mName = $Name; #注意:是$this->mName,而不是$this->$mName $this->mAge = $Age; } function __destruct() { echo "Student $this->mID destruct
"; } function __clone() { $this->mID = static::$sCount++; echo "Student $this->mID cloned.
"; } function __get($name) { if ($name == 'Name') { return $mName; } else if ($name == 'Age') { return $mAge; } else { return null; } } function __set($name, $value) { if ($name == 'Name') { if (is_string($value)) { $this->mName = $value; } } else if ($name == 'Age') { if (is_int($value)) { $this->mAge = $value; } } else { throw new Exception("No attribute $name"); } } function __ToString() { $ret = '

Class: ' . __CLASS__ . '
' . "\tName: " . $this->mName . '
' . "\tAge: " . $this->mAge . '

'; return $ret; } static private $sCount = 0; private $mID; private $mName; private $mAge;} function foo($s) { $s->Age = 30;} $s = new Student(); #实例化对象要加new,这不像Python,否则就被当成Student()函数了。 #在构造的过程中,Student::__construct()会被自动调用 $s->Name = "John"; try { $s->Sex = "male"; #Student并没有Sex属性,会抛异常} catch (Exception $e) { echo 'Exception occur!!
'; echo $e;} foo($s); /*将对象作为实参传给函数时,其实转的是这个对象的句柄,就像传的是指针一样。 在foo()中对$s对象的修改是有效的*/echo $s; #自动调用Student::__toString() $s1 = clone $s; //clone对象unset($s); $s1->Name = "LiChunjun";echo $s1;?>

   可以重定义如下关键函数:

  • __get($name)    属性获取函数,$name为属性名

  • __set($name, $value)    属性设置函数

  • __construct()    构造函数

  • __destruct()    析构函数

  • __call($name, $params)    调用函数

  • __autoload()    类定义加载回调函数

  • __tostring()    转换字符串函数

转载地址:http://efeyl.baihongyu.com/

你可能感兴趣的文章
Eclipse 中导入jar包
查看>>
arcgis api for flex 开发入门(九)webservices 的使用
查看>>
累加器配上委托也可以很吊
查看>>
c# 通过API启动外部程序
查看>>
js获取 日期 星期 时间
查看>>
C#弱引用
查看>>
[SqlServer]数据库中自定义拆分字符串函数Split()
查看>>
SQL Server-聚焦使用视图若干限制/建议、视图查询性能问题,你懵逼了?(二十五)...
查看>>
结构体对齐原理【转】
查看>>
一道有趣的面试题
查看>>
linux 查找目录或文件详解
查看>>
计算机网络课程优秀备考PPT之第五章网络层(五)
查看>>
设计模式04_抽象工厂模式
查看>>
malloc()与calloc区别【转】
查看>>
ABP理论学习之工作单元(Unit of Work)
查看>>
ASP.NET WebAPi之断点续传下载(中)
查看>>
C++编程易范的错误
查看>>
C# Socket编程笔记
查看>>
spring中间scope详细解释
查看>>
使用forName动态加载类文件
查看>>