图源:php.net 在php没有引入命名空间之前,构建比较大的应用时可能会遇到命名冲突的问题,比如: <?php // a.php class MyClass{ } <?php // b.php require_once './a/a.php'; class MyClass{ // PHP Fatal error: Cannot declare class MyClass, because the name is already in use in ... } 如果是多人协同开发的大…
图源:php.net 在php没有引入命名空间之前,构建比较大的应用时可能会遇到命名冲突的问题,比如: <?php // a.php class MyClass{ } <?php // b.php require_once './a/a.php'; class MyClass{ // PHP Fatal error: Cannot declare class MyClass, because the name is already in use in ... } 如果是多人协同开发的大…
图源:php.net Final关键字 final关键字作用于类,可以让类不能被继承。作用于方法和常量,可以让方法和常量不能被重写。属性不能被声明为final。 final的常见用途是在模版方法模式中,将基类的骨架方法声明为final: abstract class Control { protected bool $need_login = true; protected array $header = []; final public function handle_request() {…
图源:php.net 匿名类 匿名类(anonymouse classes)可以用于创建一次性对象,这在大量使用设计模式的框架代码中很常见,比如Java的图形框架。这里用一个精简的图形框架代码进行说明: <?php /** * 鼠标监听事件接口 */ interface OnclickListener { /** * 鼠标点击事件 * @param $mouse 鼠标 * @param $view 图形UI控件 */ public function onclic…
图源:php.net 继承 php可以使用extends关键字让一个类继承另一个类。继承是OOP三大特性之一,目的是可以在良好封装的基础上更好地实现代码复用。 php中,子类不能将继承自父类的可读可写属性声明为readonly: <?php class Base{ protected string $readWrite; } class Child extends Base{ readonly protected string $readWrite; // Fatal error: Cann…
图源:php.net 自动加载 在现实项目中,我们往往会将类定义单独放在一个php文件中,比如有一个类MyClass,对应的php文件名可能是my_class.cls.php,使用的时候要先使用require或include加载对应的文件。 除了手动加载文件以外,php还提供一种自动加载类文件的机制: <?php require_once "../../util/class.php"; spl_autoload_register(function ($clsName){ $fileName = "./"…
图源:php.net 基本概念 定义 php的类定义语法与其它语言几乎没有区别: <?php class Student { protected string $name = ""; protected int $age = 0; public function print(): void { echo "Student(name:{$this->name}, age:{$this->age})" . PHP_EOL; } } 像上面示例中的那样,在类定义中…
图源:php.net 定义 php的函数可以定义在任何地方,甚至是条件语句中: function create_func(int $num){ if ($num<10){ function test(){ echo "test function is called".PHP_EOL; echo "the \$num < 10"; } } else{ function test(){ …
图源:php.net if php中常用的if语法与C++或Java中的没有区别: <?php $a = 1; if ($a < 5) { echo "a < 5" . PHP_EOL; } else if ($a == 5) { echo "a == 5" . PHP_EOL; } else { echo "a > 5" . PHP_EOL; } // a < 5 其中else if也可以写作elseif,两者几乎没有区别。 php还有一种不常见的替代语法: <…
图源:php.net 表达式 php官方手册对表达式的定义是“任何有值的东西”。不同的语言对于表达式的定义是区别很大的,比如Python中很著名的“lamda表达式”,很多人觉得其本质就是个匿名函数,用处不大,这是因为他们不明白匿名函数无法嵌入表达式中使用,而lamda表达式可以。 基础数据 基础类型的数据本身就是一个表达式: echo 'hello'.PHP_EOL; echo (1).PHP_EOL; // hello // 1 需要注意的是,echo 1.PHP_EOL;会产生语法错误,因为整形值1是不能和字…
图源:php.net 语法 php常量的基本用途与其它语言类似,即在编译期而非运行期提供一种确定的、不会改变的值: const PROGRAM_VERSION = '1.0.0'; const DB_VERSION = '1.0.0'; const AUTHOR = 'icexmoon'; 这些常量通常用于定义软件版本号、作者信息等。 按习惯,常量名通常以全大写字母结合_定义。 在Go语言是个例外,其变量和常量命名都不推荐使用_,所以常量命名只能是大小写字母的驼峰样式。 常量与超全局变量类似,一经定义,可以在任何地…
魔芋红茶
加一点PHP,加一点Go,加一点Python......
COPYRIGHT © 2021 icexmoon.cn. ALL RIGHTS RESERVED.
本网站由提供CDN加速/云存储服务
Theme Kratos Made By Seaton Jiang