开发者社区> 李名赫> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

PHP语法特点

简介:
+关注继续查看

我的主攻是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. 可变变量


<?php
$text="My Name";
$a = "text";
echo $$a;
echo '<br>';
$b = 'a';
echo $$$b;
?>

   124459_zWNE_243525.png

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

    函数也可以这样引用:


<?php
function come() {
    echo "I am coming. <br/>";
}
function back() {
    echo "I am back. <br/>";
}
$func = "come";
$func();
$func = "back";
$func();
?>

133739_6PNA_243525.png

14. 预定义环境变量

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


15. 函数可以以引用传参


<?php
function example(&$m) {
    $m = $m * 5 + 10;
}
$m = 1;
example($m);
echo "<p>在函数外:\$m = $m</p>";
?>

131558_7qN4_243525.png

16. foreach循环


<?php
$map = array('john'=>18, 'licy'=>22);
foreach ($map as $key=>$value) {
    echo "$key=>$value, ";
}
echo '<br/>';
?>

134725_tcmk_243525.png


17. 面向对象与Java类似


<?
#示例学生类
class Student
{
    #构造函数,没有指定public, protected, private,默认为public
    function __construct($Name = "Unknow", $Age = 0)
    {  
        $this->mID = static::$sCount++; #注意静态成员的引用方法
        echo "Student $this->mID construct<br/>";
        $this->mName = $Name;    #注意:是$this->mName,而不是$this->$mName
        $this->mAge = $Age;
    }
 
    function __destruct() 
    {
        echo "Student $this->mID destruct<br/>";
    }
 
    function __clone() 
    {
        $this->mID = static::$sCount++;
        echo "Student $this->mID cloned.<br/>";
    }
 
    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 = '<hr/>Class: ' . __CLASS__ . '<br/>' . 
            "\tName: " . $this->mName . '<br/>' .
            "\tAge: " . $this->mAge . '<br/><hr/>';
        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!!<br/>';
    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()    转换字符串函数



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
PHP 继承特点|学习笔记
快速学习 PHP 继承特点,PHP 的面向对象并不一样,它的技巧也有区别。接下来学习 PHP 的继承特点,其实主要是为了避免在使用过程中出现一些理所应当的问题,而实际上要基于 PHP 实际上的特点进行开发。
0 0
ECS配置mySQL\MariaDB和PHP环境
ECS配置mySQL\MariaDB和PHP环境
0 0
php操作mysql防止sql注入(合集)
php操作mysql防止sql注入(合集)
0 0
Centos中查看nginx、apache、php、mysql配置文件路径
Centos中查看nginx、apache、php、mysql配置文件路径
0 0
MySQL事务的四种隔离类型以及PHP框架Yii2中的源码解读和实际应用
MySQL事务的四种隔离类型以及PHP框架Yii2中的源码解读和实际应用
0 0
头歌php mysql操作答案
头歌php mysql操作答案
0 0
PHP连接MySQL 8.0报错的解决办法
PHP连接MySQL 8.0报错的解决办法
0 0
PHP连接MySQL 8.0报错的解决办法
PHP连接MySQL 8.0报错的解决办法
0 0
PHP+MySQL打造XXX管理系统
PHP+MySQL打造XXX管理系统
0 0
PHP error:mysql_fetch_row() expects parameter 1 to be resource, boolean given 的错误
PHP error:mysql_fetch_row() expects parameter 1 to be resource, boolean given 的错误
0 0
+关注
李名赫
博主从事的是物联网行业,目前在某知名智能家居科技公司担任家庭智能中心研发主管。欢迎交流!
文章
问答
文章排行榜
最热
最新
相关电子书
更多
PHP安全开发_从白帽角度做安全
立即下载
PHP在机器学习上的应用及云深度学习平台的架构设计与实现
立即下载
PHP与APM_技术内幕和最佳实践
立即下载