批改状态:合格
老师批语:static有好几种用法呢
<?phpfunction echobr($param = ''){echo $param . '<br>';}function dumpbr($param = ''){var_dump($param);echo '<br>';}function printfpre($param = ''){printf('<pre>%s</pre>', print_r($param, true));}
/** file1.php*/<h2>你好,这里是file1.php</h2>
/** file2.php */<h2>你好,这里是file2.php</h2>
// test1: 文件加载的路径值支持的类型/* 1. 字面量 */include 'file1.php';/* 2. 变量 */$path = 'file1.php';include $path;/* 3. 带变量的双引号字符串 */include "{$path}";/* 4. 表达式 */$filename = 'file1';include $filename . '.php';/* 5. 采用类似调用函数的形式 */include('file1.php');// test2: 相同文件只加载一次/* 加载多次file2.php文件, 实际只第一次成功加载, 后面的都被忽略了 */include_once 'file2.php';include_once 'file2.php';include_once 'file2.php';// test2: 加载不存在的文件, 并不会中断程序的执行.include 'file256.php';echobr('<h2>没有事, 程序照常执行, 要不想显示警告信息, 加上@</h2>');
// test1:/* 1. 字面量 */require 'file1.php';/* 2. 变量 */$path = 'file1.php';require $path;/* 3. 带变量的双引号字符串 */require "{$path}";/* 4. 表达式 */$filename = 'file1';require $filename . '.php';/* 5. 采用类似调用函数的形式 */require('file1.php');// test2: 加载相同文件一次require_once 'file2.php';require_once 'file2.php';require_once 'file2.php';// test3: 加载不存在的文件require 'file256.php';/*Warning: require(file256.php): failed to open stream: No such file or directory in D:\phpstudy_pro\WWW\php11\PHP\0427\homework\homework.php on line 61Fatal error: require(): Failed opening required 'file256.php' (include_path='.;C:\php\pear') in D:\phpstudy_pro\WWW\php11\PHP\0427\homework\homework.php on line 61*/echobr('<h2>本内容无法打印输出</h2>');
/** file3.php */<?php$filename = 'file3.php';function fileName(){return 'function ' . __FUNCTION__ . ' return : file3.php';}
// 当前是全局作用域require 'file3.php';require 'file3.php';echobr(fileName());/*不能打印fineName()函数的返回值, 因为加载了两次file3.php, 相当于在全局作用域定义了两次fileName()函数.result: Fatal error: Cannot redeclare fileName() (previously declared in D:\phpstudy_pro\WWW\php11\PHP\0427\homework\file3.php:6) in D:\phpstudy_pro\WWW\php11\PHP\0427\homework\file3.php on line 7*/
// 名称空间中引入namespace np1 {require '../../out.php';require 'file3.php';echobr(fileName());/*result : function fileName return : file3.php*/echobr($filename ?? 'np1_没有名字');}// 全局作用域引入namespace {echobr(fileName());/*result : function fileName return : file3.php*/echobr($filename ?? 'global_没有名字');}namespace np2 {echobr(fileName());/*result: function fileName return : file3.php*/echobr($filename ?? 'np2_没有名字');}
require '../../out.php';function func(){require('file3.php');// 函数是全局的, 所以都可以访问echobr(fileName());echobr($filename ?? 'func_没有名字');}func();// 函数是全局的, 所以可以访问echobr(fileName());// filename变量是函数域中引入的, 在函数域中才克访问echobr($filename ?? 'global_没有名字');
class来声明类
class Class1 {// todo...}
new来创建类的实例
$cls1 = new Class1;
instanceof判断对象是否为某个类的实例
$cls1 = new Class1;echobr('对象$cls1' . (($cls1 instanceof Class1) ? '是' : '不是') . 'Class1类的实例');/*result: 对象$cls1是Class1类的实例*/
get_class函数获取对象的类名
$cls1 = new Class1;echobr('对象$cls1是' . get_class($cls1) . '类的实例');/*result: 对象$cls1是Class1类的实例*/
$className = 'Class1';$cls1 = new $className;dumpbr($cls1);/*result: object(Class1)#2 (0) { }*/
类的成员包括: 类属性, 类方法, 类常量
self关键字来代表类本身;用$this变量来代表当前对象.->来访问类的常规属性, 访问方式:对象->属性名 仅限public的属性$this->属性名 可以访问类中定义的所有属性::来访问类的静态属性/常量, 访问方式:类名::静态属性; 类名::常量self::静态变量; self::常量
/** 声明类属性、类外部访问类属性demo */<?phprequire('../../out.php');class Employee{// 1. 常规属性/* 字符串 */public $name = '张三';/* 数字 */public $age = 25;/* 布尔 */public $marriage = false;/* 字面量数组 */public $like = ['编程', '游泳', '旅游', '日漫'];/* 长文本1 */public $introduce = <<< EOP介绍, 长文本介绍, 长文本介绍, 长文本介绍, 长文本...EOP;/* 长文本2 */public $education = <<< 'EOP'教育经历, 长文本教育经历, 长文本教育经历, 长文本教育经历, 长文本...EOP;/* 2. 常量 */const HELLO = 'Hello';/* 3. 静态属性 */public static $empoyeeTotal = 200;/* 4. 抽象属性 */public $fireDate;/* 不能用[变量/类属性/表达式/函数]作为类属性赋默认值 */}// 访问类属性$emp = new Employee;// 访问常规属性echobr("员工姓名: {$emp->name}, 年龄: {$emp->age}岁, 婚否: " . ($emp->marriage ? '已婚' : '未婚') . ", 爱好: " . join('/', $emp->like));echobr("自我介绍: {$emp->introduce}");echobr("教育经历: {$emp->education}");echobr('------');// 访问常量/静态属性echobr("打招呼: " . Employee::HELLO);echobr("员工总数: " . Employee::$empoyeeTotal);// 抽象属性的默认值是nulldumpbr($emp->fireDate);/*result:员工姓名: 张三, 年龄: 25岁, 婚否: 未婚, 爱好: 编程/游泳/旅游/日漫自我介绍: 介绍, 长文本 介绍, 长文本 介绍, 长文本 介绍, 长文本 ...教育经历: 教育经历, 长文本 教育经历, 长文本 教育经历, 长文本 教育经历, 长文本 ...------打招呼: Hello员工总数: 200NULL*/
include/require和 include_once/require_once完成的功能基本一样。前一组可以多次加载同一个文件,适合加载在相同页面多次用到代码文件,如HTML组件等。后一组同一个文件只加载一次,适合加载各种脚本文件,如js脚本文件,PHP脚本文件等。include/include_once和require/require_once是有区别的。前一组加载不到目标文件时,并不会导致致命错误,不影响程序的正常执行。使用@可忽略其输出的警告。适合用来加载非不可或缺的文件。后一组加载不到目标文件时,会导致知名错误,程序会停止往下执行。适合用来加载不可或缺的文件。->来访问类的常规属性, 访问方式:对象->属性名 仅限public的属性$this->属性名 可以访问类中定义的所有属性::来访问类的静态属性/常量, 访问方式:类名::静态属性; 类名::常量self::静态变量; self::常量
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号