所涉及到的系统函数有下面
1.魔术常量(__FILE__)
php里面有3类魔术,魔术常量,魔术方法,魔术引号。这个地方
魔术常量就下面的7个,和普通常量不同,魔术常量随着所处的位置而发生变化。
php里面的魔术常量有7个,分别是:
__LINE__当前文件行号
__FILE__文件的完整路径和文件名(4.0.2起总是包含一个绝对路径,此前的版本有时会有相对路径)
__DIR__文件所在目录,等价于dirname(__FILE__),末尾不包含斜杠,除非是根目录。(5.3.0新增)
__FUNCTION__所在的函数名称(4.3.0新增,返回方法名一律小写),php5以后区分大小写。
__CLASS__所在类的名称(4.3.0新增,返回类名一律小写)php5以后区分大小写。
__METHOD__类的方法名称(5.0.0新增)区分大小写
__NAMESPACE__空间名称(编译时候定义,大小写敏感) v5.3.0新增
魔术方法:
PHP把所有以__(两个下划线)开头的类方法当成魔术方法。所以当你定义类方法时,除了上述魔术方法,建议不要以 __为前缀
总共有14个魔术方法,分别是:
__construct :构造函数,初始化对象的时候会调用该方法,子类中存在构造函数时,不会阴式调用父类构造函数,显式调用parent::__construct()方法。为了向后兼容,如果没有__construct方法,则会寻找和类同名的函数。自5.3.3以后,命名空间里与类同名的方法或不再作为构造函数,不影响不在命名空间里面的类。
__destruct 析构函数 ,如果子类存在析构函数,不会自动调用父类的析构函数。脚本关闭的时候调用。
__call 当调用一个不可访问方法(如未定义,或者不可见)时,调用__call第一个参数是方法名,第二个参数是参数列表
__callStatic当试图中调用一个不可访问的静态方法时(如未定义,或者不可见)时【5.3.0新增】
__get 当获取未定义的属性时,会调用__get ,
__set 在给未定义的属性赋值时,会调用__set方法。 第一个参数是属性名,第二个参数是value
__isset 【5.1.0新增】
__unset 【5.1.0新增】
__sleep 序列化serialize ,如果该方法存在,先调用该方法,且返回要序列化的数组,如果返回NULL,NULL被序列化,且产生一个E_NOTICE错误。
__wakeup 反序列化,unserialize 会首先调用该方法。
__toString echo对象的时候,如果有该方法则调用该方法【5.2.0前只能用echo ,print,之后可以再任何字符串环境中运用】
__invoke 当尝试以调用函数的方式调用对象时,该方法将被调用【5.3.0及以上版本有效】
__set_state 当var_export被调用时,该方法会被调用【5.1.0起有效】
__clone 当对象复制的时候
魔术引号:
magic_quotes_gpc 【不推荐使用,5.3以后不推荐使用,5.4完全移除】。当它开启时,所有的(Get/Post/Cookie)gpc,中的单/双引号都会转义。
get_magic_quotes_gpc方法获取该配置状态。
没有set方法,也不能通过ini_set来设置,只能修改配置文件,或者.htaccess文件。
magic_quotes_runtime 【不推荐使用,5.3以后不推荐使用,5.4完全移除】。运行时,当写入文件,读取文件等操作会影响
set_magic_quotes_runtime 设置开关,【5.3已废弃】,建议用ini_set来设置。
get_magic_quotes_runtime 获取配置状态。
为什么magic_quotes_gpc不能通过ini_set 来设置,而magic_quotes_runtime可以这样设置?
注意到安装配置-->运行时配置-->where a configuration setting may be set
关于配置选项修改级别,有4个级别:
PHP_INI_USER 1 可以在程序里面通过ini_set 设置,也可以修改注册表(windows平台)
PHP_INI_PERDIR 6 只能在php.ini,.htaccess,和httpd.conf 修改
PHP_INI_SYSTEM 4 只能在php.ini,httpd.conf修改
PHP_INI_ALL 7 在所有地方都可以修改
哪些指令属于 PHP_INI_ALL
,PHP_INI_PERDIR
或 PHP_INI_SYSTEM
中的哪一个,请参考附录中的
附录--php.ini配置选项列表:
magic_quotes_gpc | "1" | PHP_INI_PERDIR |
magic_quotes_runtime | "0" | PHP_INI_ALL |
一目了然了。
php魔术 告一段落。
2.函数dirname
该函数属于文件系统相关扩展(FileSystem 函数)
dirname : 返回目录路径。
basename:返回路径中的文件名部分。如果文件有后缀,指定第二个参数也可以将后缀去掉。
pathinfo : 返回文件路径的信息,2个参数,文件路径,及要返回的值(dirname,basename,extension)
realpath : 返回规范化的路径,失败返回false
相似函数:
disk_free_space()可用空间
disk_total_space()总的空间大小
delete 同unlink 删除文件。
rmdir()删除目录,目录必须为空,且有权限操作,成功true,失败false,【5.0.0以后也可以用于某些url协议,支持上下文】
3.microtime 日历/时间相关函数 Date/Time函数
microtime()返回当前的时间戳和微秒数。【5.0.0后新增参数true/false】
time()返回当前的时间戳(不含微秒)
mktime()获取一个日期的时间戳。时间戳是一个长整形,包含了从 Unix 纪元(January 1 1970 00:00:00 GMT)到给定时间的秒数。参数依次是,时,分,秒,月,日,年,【最后一个参数是表示十分是夏时制,5.1后废弃】,注意,该方法必须至少有一个参数,否则5.1后会抛出 throws E_STRICT
notice. Use the time() function instead。如果参数非法,返回false,5.1之前返回-1.
gmmktime 获取GMT日期的unix的时间戳。和mktime()一样,只是返回的是格林威治标准时的时间戳
strtotime 将任何英文日期时间描述解析为 Unix 时间戳。
date(),格式化日期/时间,将给出的时间戳格式化成指定的格式。
spl_autoload_register 函数【注册一个自动加载】版本php5.1.2以上。
参数为callback类型。如果没有参数,自动注册autoload的默认实现函数spl_autoload()。
有参数的话,自动调用该参数对应的方法。
5.3之后支持命名空间。
callback类型,在文档语言参考--类型--文档使用的伪类型中
介绍了3中伪类型,分别是
mixed:可以介绍多种类型,但是不是所有的类型
number,integer或float
callback 有的函数需要传递函数作为参数,如call_user_function,
不仅仅函数名还可以是对象的方法,包括静态方法。数组第一个元素是类名,第二个元素是方法。
还可以调用create_function 创建一个匿名的回调函数。
spl_autoload_unregister 注销注册的自动加载方法。
spl_autoload_functions 获取已经注册的自动加载方法。
spl_autoload_extensions 修改默认实现函数 spl_autoload() 所使用的扩展名
void spl_autoload_call[$classname] 调用所有的已注册的自动加载函数来请求类。
strpos :查找字符串在第一个参数字符串中首次出现的位置 ,没找到返回false,,第三个参数代表查找的起始位置。
stripos : 查找字符串首次出现的位置(不区分大小写)
strripos :查找字符串在目标字符串中最后出现的位置(不区分大小写)
strrchr :查找指定字符在字符串中的最后一次出现
substr :截取字符串
strstr ,返回 haystack
字符串从 needle
第一次出现的位置开始到 haystack
结尾的字符串。
stristr 和strstr相比,不区分大小写。
is_file 函数:
FileSystem函数
判断文件是否为正常的文件。
realpath :返回规范化的绝对路径名.
basename:返回路径的文件名,如果有文件后缀,第二个参数指定后缀,可以去掉文件后缀
str_replace:将第三个参数中的所有第一个参数替换成第二个参数。
ltrim:去掉字符串开始位置的字符。默认空字符
相似:rtrime,右边的字符。
trime ,去除字符串两端的字符。
class_exists,interface_exists 【class/object函数】
is_dir 判断给定文件名是否是一个目录
相似的函数包括:
is_executable 判断给定文件名是否可执行,如果存在且可执行,返回true
is_file ,判断文件是否是正常文件,如果文件存在且为正常的文件则返回 TRUE
。
is_link,判断给定文件名是否为一个符号连接,如果文件存在且为符号链接返回true
is_readable 判断给定文件名是否可读,存在且可读返回true
is_uploaded_file 判断文件是否是通过 HTTP POST 上传的 文件是通过 HTTP POST 上传的则返回 TRUE
is_writable( is_writeable ) 判断给定的文件名是否可写 ,如果存在且可写返回true
这里涉及到超全局变量$_SERVER。
实际上超全局变量总共有9个,除了我们常见的$_GET,$_POST,$_REQUEST外
还包括$GLOBALS,$_SERVER,$_COOKIE,$_SESSION,$_FILES,$ENV
其中$_GET,$_POST,$_REQUEST是和浏览器请求相关的,
$_COOKIE是和cookie本地相关,$_SESSION和服务器session相关,
$_FILES和上传相关,$_SERVER和服务器相关,$ENV和环境相关。$GLOBALS,全局的变量。
相关推荐
静态初始化发生在程序加载时,主要针对那些可以用常量表达的初始化,例如零初始化(zero initialization)和常量初始化(const initialization)。零初始化的变量通常存放在BSS段,而常量初始化的变量则位于数据段,...
同时,初始化列表确保了成员变量在使用前已经被正确初始化,增加了程序的安全性。 #### 总结 构造函数初始化列表是C++中一个强大而灵活的特性,它不仅提高了代码的执行效率,还增强了程序的安全性和可维护性。掌握...
总结来说,C# 中的结构要求在调用任何方法之前进行完全初始化,也就是说,所有字段都需要有明确的初始值。这可以是通过直接为每个字段赋值,或者是通过构造函数进行初始化。不进行完全初始化可能导致编译错误或运行...
【C】数组数组初始化总结;参见博客https://blog.csdn.net/u010168781/article/details/80061118
我们可以在业务层自己控制 A 和 B 的初始化顺序,在 A 中设置一个“是否初始化的”标记,B 初始化前检测 A 是否得以初始化,如果没有则调用 A 的初始化方法,所谓的 check-and-act。 这种方法的优点是可以做到 lazy...
总结来说,C++中的类成员和数据成员初始化是一个严谨的过程,需要理解构造函数的机制,以及`const`、`static`和数组的特殊性。正确初始化成员可以确保对象的有效性和代码的健壮性。遵循这些规则,可以帮助我们编写出...
总结来说,MFC中的通用控件初始化涉及到comctl32.dll的加载和控件窗口类的注册。`InitCommonControls`提供简单的全量初始化,而`InitCommonControlsEx`允许选择性地初始化特定控件,以满足不同的功能需求。正确初始...
ARM初始化文件详解 ...总结,ARM初始化文件是嵌入式系统启动过程中的关键组件,它的正确配置直接影响系统的稳定性和性能。理解并掌握初始化文件的结构和工作原理,对于开发高效、可靠的嵌入式系统至关重要。
本文详细介绍了类继承中的初始化顺序问题,包括初始化的基本概念、初始化过程中的关键步骤以及如何正确处理基类和子类之间的构造函数调用。理解这些概念对于编写高效、可维护的面向对象程序至关重要。希望通过对这些...
### WPF 对象初始化器详解 #### 一、对象初始化器概述 对象初始化器是C# 3.0引入的一项新特性,它简化了对象创建的过程。在传统的面向对象编程中,创建对象后通常需要手动设置各个属性。这种方式不仅繁琐,而且...
"串口初始化代码分析" 在本文中,我们将对 LPC2366 串口初始化代码进行分析,主要包括波特率计算、管脚配置、工作模式选择、中断寄存器配置等内容。 一、管脚配置 在串口初始化过程中,首先需要配置管脚。这里使用...
初始化结构体时,通常有两种方式:构造函数初始化(如果结构体是类)和成员初始化列表。由于 `struct` 在C++中等同于类,但不支持构造函数,所以我们必须使用成员初始化列表。例如,对于 `PhotoInfo` 结构体,其初始...
#### 二、初始化前准备 - **确认环境条件**:确保安装环境的温度和湿度符合设备要求,避免因温差过大导致内部元件受潮或变形。 - **准备工具**:一字螺丝刀用于拧松蓝色大螺丝;可能还需要其他基本工具如手套等。 - ...
- **利用early_res分配内存**: 在系统完全初始化前使用特定内存区域。 - **触碰虚拟文件系统**: 初始化文件系统支持。 - **初始化异常服务**: 设置异常处理机制。 - **初始化内存管理**: - **启用伙伴算法**: 一种...
S7-300 初始化的方法 S7-300 是一种高性能的可编程逻辑控制器(PLC),广泛应用于工业自动化领域。为了确保 S7-300 的正常运行,初始化是必不可少的一步。本文将详细介绍 S7-300 初始化的方法,包括微存储卡 MMC 的...
### Java中类的初始化顺序详解 #### 一、概述 在Java编程语言中,类的初始化是一个非常重要的概念。类的初始化涉及到多个方面,包括静态成员变量、实例成员变量、静态初始化块、实例初始化块以及构造函数等。本文...
### SIM900A 初始化流程详解 #### 一、硬件初始化流程 在开始SIM900A模块的初始化过程之前,首先要确保硬件连接正确无误。以下为SIM900A模块的硬件初始化流程: 1. **确保外围电路正确连接**: - 在给模块上电...
系统初始化是指在软件正式投入使用前进行的一系列设置与配置工作,确保系统能够正常运行并满足用户需求。这一过程通常包括但不限于数据库的创建、权限的分配、初始数据的录入等步骤。初始化工作的成功与否直接关系到...
总结,要在MDK环境下实现复位后变量不被初始化,你需要结合项目选项和代码修改两步操作。通过这种方式,你可以确保即使在受到干扰导致复位的情况下,特定的变量也能保留其之前的值,从而满足项目的需求。
总结来说,Java初始化与方法是编程基础,深入理解这两个概念对于任何Java开发者都至关重要。通过阅读源码、运用开发工具和不断实践,我们可以不断提高自己的编程水平,从而在实际工作中游刃有余。