PHP中const和define定义常量的区别
- 格式:pdf
- 大小:311.30 KB
- 文档页数:5
第1篇一、基础题1. 问题:请解释PHP中`$_SERVER`的作用。
答案:`$_SERVER`是一个全局数组,它包含了头信息、路径和脚本位置等信息。
通过这个数组,我们可以获取到诸如服务器的名称、执行脚本的路径、HTTP请求头等信息。
2. 问题:简述PHP中的魔术引用(`&`)的作用。
答案:魔术引用在PHP中用于引用传递。
当使用`&$variable`时,实际上传递的是变量的引用,而不是值。
这在函数内部修改变量时非常有用,因为它允许函数内部直接修改外部传入的变量。
3. 问题:请解释PHP中的`include`和`require`的区别。
答案:`include`和`require`都是用于包含其他PHP文件的工具,但它们在错误处理上有区别。
`require`如果找不到文件,会抛出一个致命错误并终止脚本执行;而`include`则会输出一条警告信息,但不会终止脚本执行。
4. 问题:如何使用PHP获取当前的时间戳?答案:可以使用`time()`函数获取当前的时间戳,该函数返回自1970年1月1日00:00:00 UTC以来的秒数。
5. 问题:简述PHP中的数据类型。
答案:PHP有八种数据类型,包括整型(int)、浮点型(float)、字符串(string)、布尔型(bool)、对象(object)、资源(resource)、数组(array)和NULL。
二、进阶题1. 问题:请解释PHP中的`session`和`cookie`的区别。
答案:- `session`存储在服务器端,通过会话ID来识别不同的用户,安全性较高。
- `cookie`存储在客户端,通常用于存储用户偏好设置或其他小量数据,安全性相对较低。
2. 问题:如何使用PHP进行文件上传?答案:- 首先,需要设置`php.ini`文件中的`file_uploads`和`upload_max_filesize`参数。
- 在HTML表单中,使用`enctype="multipart/form-data"`属性。
PHP常量1.声明和使用常量常量可以理解为值不变的变量。
常量值被定义后,在脚本的其他任何地方都不能改变。
常量通常具有如下的属性:●常量区分大小写,在定义的时可以指定是否大小写敏感。
●其命名的规则和变量一样●常量的开头字母只能是字母和下划线,后面可以接任意个数的字母字符。
●默认的情况下,它的作用域是全局的,即在当前当前脚本的任何地方都可以使用。
●已定义常量的名称不能与再次定义的常量和变量的名称相同●在定义常量时,应该尽可能使用大写字符,便于阅读和识别。
●常量的名称不能以字符$开头,它们的值只能是特定类型的:整数、浮点数、字符串和布尔值。
在PHP中通常使用define()函数来定义常量;使用constant()函数动态获取常量值;使用defined()函数判断一个常量是否已经定义;使用get_defined_constants()函数获取所有当前已经定义的常量。
define()函数该函数用来定义常量语法:define(string constant_name,mixed value,case_sensitive=true)该函数有3个参数:constant_name:必选参数,常量名称,即标志符。
value:必选参数,常量的值。
Case_sensitive:可选参数,指定是否大小写敏感,设定为true,表示不敏感。
例子:测试常量<?php//了解常量//测试1:常量区分大小写//define("aaa",22);//define("AAA",26);//echo aaa;//echo "<br>";//echo AAA;//从输出结果可以看出常量是区分大小写的//测试2:在定义时指定是否大小写敏感//define("aaa",22,true);//define("AAA",26,true);//echo aaa;//echo "<br>";//echo AAA;//从输出结果可以看出在将参数Case_sensitive设定为true后,大小写为不敏感!//测试3:常量的命名//define("3ads",89);//echo 3ads;//输出:syntax error说明常量不能是数字开头//echo _ads;//输出:syntax error说明常量可以是下划线开头//define("a3_ds",89);//echo a3_ds;//输出:syntax error说明常量可以是字母开头/*** 测试4:测试使用范围-常量一旦被声明将可以在全局可见,也就是说,它们可以在函数内外使用,* 但是这仅仅限于一个页面之中(包含我们通过include和include_once)包含进来的PHP脚本,但是在其他的页面之中就不能使用了。
PHP命名空间(Namespace)的使⽤详解命名空间⼀个最明确的⽬的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产⽣⼀个致命的错误。
这种情况下只要避免命名重复就可以解决,最常见的⼀种做法是约定⼀个前缀。
例:项⽬中有两个模块:article和message board,它们各⾃有⼀个处理⽤户留⾔的类Comment。
之后我可能想要增加对所有⽤户留⾔的⼀些信息统计功能,⽐如说我想得到所有留⾔的数量。
这时候调⽤它们Comment提供的⽅法是很好的做法,但是同时引⼊各⾃的Comment类显然是不⾏的,代码会出错,在另⼀个地⽅重写任何⼀个Comment也会降低维护性。
那这时只能重构类名,我约定了⼀个命名规则,在类名前⾯加上模块名,像这样:Article_Comment、MessageBoard_Comment可以看到,名字变得很长,那意味着以后使⽤Comment的时候会写上更多的代码(⾄少字符多了)。
并且,以后如果要对各个模块增加更多的⼀些整合功能,或者是互相调⽤,发⽣重名的时候就需要重构名字。
当然在项⽬开始的时候就注意到这个问题,并规定命名规则就能很好的避免这个问题。
另⼀个解决⽅法可以考虑使⽤命名空间。
注明:本⽂提到的常量:PHP5.3开始const关键字可以⽤在类的外部。
const和define都是⽤来声明常量的(它们的区别不详述),但是在命名空间⾥,define的作⽤是全局的,⽽const则作⽤于当前空间。
我在⽂中提到的常量是指使⽤const声明的常量。
基础命名空间将代码划分出不同的空间(区域),每个空间的常量、函数、类(为了偷懒,我下边都将它们称为元素)的名字互不影响,这个有点类似我们常常提到的’封装’的概念。
创建⼀个命名空间需要使⽤namespace关键字,这样:<?php//创建⼀个名为'Article'的命名空间namespace Article;>要注意的是,当前脚本⽂件的第⼀个命名空间前⾯不能有任何代码,下⾯的写法都是错误的:例⼀//在脚本前⾯写了⼀些逻辑代码<?php$path = "/";class Comment { }namespace Article;>例⼆</html><?phpnamespace Article;>为什么要说第⼀个命名空间呢?因为同⼀脚本⽂件中可以创建多个命名空间。
php期末考试试题(含答案)一、选择题(每题 5 分,共 25 分)1. PHP 代码中,用于定义一个常量的关键字是?A. constB. defineC. staticD. variable答案:A2. 以下哪个函数用于获取客户端请求的 IP 地址?A. getenv()B. $_SERVER['REMOTE_ADDR']C. ip2long()D. long2ip()答案:B3. 在 PHP 中,哪个变量用于存储表单提交的数据?A. $_GETB. $_POSTC. $_COOKIED. $_FILES答案:B4. 以下哪个函数用于生成一个随机字符串?A. rand()B. mt_rand()C. substr()D. bin2hex()答案:D5. 在 PHP 中,哪个函数用于检查变量是否为正整数?A. is_int()B. is_float()C. is_string()D. is_numeric()答案:A二、填空题(每题 5 分,共 25 分)1. PHP 代码中,用于定义变量的关键字是?答案:$2. 在 PHP 中,超级全局变量$_SERVER['PHP_SELF'] 用于获取?答案:当前请求的文件名3. PHP 中的数组可以使用哪种数据类型作为键值?答案:整数、浮点数、字符串、布尔值4. 以下哪个函数用于连接数据库?答案:mysqli_connect() 或 PDO::__construct()5. 在 PHP 中,哪个函数用于输出字符串?答案:echo 或 print()三、编程题(共 40 分)1. 编写一个 PHP 程序,实现以下功能:(1)接收用户输入的用户名和密码;(2)判断用户名和密码是否为空;(3)如果用户名和密码都不为空,则将其存储到数据库中;(4)如果用户名或密码为空,则提示用户输入完整信息。
答案:```php<?php// 连接数据库$conn = mysqli_connect("localhost", "username", "password", "database");// 检查连接if ($conn->connect_error) {die("连接失败: " . $conn->connect_error);}// 接收用户输入$username = $_POST['username'];$password = $_POST['password'];// 判断用户名和密码是否为空if (empty($username) || empty($password)) {echo "用户名和密码不能为空";} else {// 存储到数据库$sql = "INSERT INTO users (username, password) VALUES ('$username', '$password')";if ($conn->query($sql) === TRUE) {echo "新记录插入成功";} else {echo "Error: " . $sql . "<br>" . $conn->error;}}// 关闭数据库连接$conn->close();>```2. 编写一个 PHP 程序,实现以下功能:(1)接收用户上传的文件;(2)判断文件类型是否为图片;(3)如果文件类型为图片,则将其保存到服务器上;(4)如果文件类型不是图片,则提示用户上传错误。
第1篇一、PHP基础1. 请解释PHP的全称及其用途。
答:PHP的全称是PHP: Hypertext Preprocessor,它是一种开源的通用脚本语言,主要用于服务器端开发,能够嵌入HTML、JavaScript、XML中,用于创建动态网页和应用程序。
2. 请简述PHP的数据类型。
答:PHP支持以下数据类型:整型(int)、浮点型(float)、布尔型(bool)、字符串(string)、数组(array)、对象(object)、NULL、资源(resource)。
3. 请解释PHP中的变量声明方式。
答:在PHP中,变量以$符号开头,后跟变量名,例如:$name = "张三"。
4. 请解释PHP中的常量声明方式。
答:在PHP中,使用define()函数或const关键字声明常量,例如:define("PI", 3.14159) 或 const PI = 3.14159。
5. 请解释PHP中的函数定义和调用。
答:使用function关键字定义函数,例如:function sayHello() { echo "Hello, world!"; };调用函数时直接使用函数名,例如:sayHello()。
6. 请解释PHP中的数组操作。
答:PHP数组可以是索引数组或关联数组。
索引数组使用数字索引,关联数组使用字符串索引。
可以使用array()函数创建数组,例如:$arr = array("name" => "张三", "age" => 20);数组操作方法包括遍历、添加、删除、修改等。
7. 请解释PHP中的对象操作。
答:PHP使用面向对象编程(OOP)模型。
使用class关键字定义类,使用new关键字创建对象。
对象操作包括创建、访问、修改属性和方法。
8. 请解释PHP中的字符串操作。
#define、const、typedef的差别#define 并不是定义变量啊#define 只是用来做文本替换的例如:#define Pi 3.1415926float angel;angel=30*Pi/180;那么,当程序进行编译的时候,编译器会首先将“#define Pi 3.1415926”以后的,所有代码中的“Pi”全部换成“3.1415926”然后再进行编译。
我查到一个讲const与#define的差别的帖子,里面谈到const与#define最大的差别在于:前者在堆栈分配了空间,而后者只是把具体数值直接传递到目标变量罢了。
或者说,const的常量是一个Run-Time的概念,他在程序中确确实实的存在并可以被调用、传递。
而#define常量则是一个Compile-Time概念,它的生命周期止于编译期:在实际程序中他只是一个常数、一个命令中的参数,没有实际的存在。
const常量存在于程序的数据段,#define常量存在于程序的代码段。
至于两者的优缺点,要看具体的情况了。
一般的常数应用,笔者个人认为#define是一个更好的选择:i.从run-time的角度来看,他在空间上和时间上都有很好优势。
ii.从compile-time的角度来看,类似m=t*10的代码不会被编译器优化,t*10的操作需要在run-time执行。
而#define的常量会被合并(在上例中T*10将被0x82取代)。
但是:如果你需要粗鲁的修改常数的值,那就得使用const了,因为后者在程序中没有实际的存在。
(其实应该说修改数据段比代码段要简单^_^)。
有关#define的用法1.简单的define定义#define MAXTIME 1000程序中遇到MAXTIME就会当作1000来处理.一个简单的MAXTIME就定义好了,它代表1000,如果在程序里面写if(i<MAXTIME){.........}编译器在处理这个代码之前会对MAXTIME进行处理替换为1000。
const在编程中经常遇到,包括全局变量和局部变量的修饰,函数参数的修饰,函数返回值的修饰等,下面我们来一步步的回顾下有关const关键词的一些用意和疑问,并重新梳理一下const是何许人也?1. const修饰的只读变量必须在定义的同时初始化;因为如果没有被赋初值,那么变量被编译器分配了一个空间,并且赋给默认的一个值,一般是很大的一个负数,当我们再次给这个const变量赋值的时候就会出现错误,这个变量是只读的,一旦被赋值了就不能再改变了。
2. case后面不可以是const修饰的只读变量,因为case之后只能是常量;3. 函数的参数中的有const关键字,例如:void fun(constint *a, constint *b){statement;}这个参数不是定义,是声明而已,函数在调用的时候传递参数,同时给const变量赋值,这个过程是一个整体,而不是分化。
另外,const告诉编译器,a,b的值在函数体内不能被改变。
声明除了函数的参数外,还有一种关于const变量的声明:extern constint a;注意这里只是声明,而不是定义。
4. const和define的区别:const效率更高;const变量在编译期间,编译器通常不为它分配内存空间,而是将他们保存在符号表中,例如:#define LEN 3 //宏常量constint MAX = 5; //此时并未将MAX放入内存中....int i = MAX; //此时为MAX分配内存,以后不再分配int j = LEN; //预编译期间进行宏替换,为LEN分配内存int k = MAX; //不再为MAX分配内存int m = LEN; //再次进行宏替换,又一次为LEN分配内存5. const修饰的位置不同意义也不同:(1)修饰一般简单只读变量:a. constint i = 2;等同于intconst i = 2;b. constint a[2] = {0,1};等同于intconst a[2] = {0,1};(2)修饰指针变量:a. constint *p; // p可以变,p指向的对象不可变;b. intconst *p; // p可以变,p指向的对象不可变;c. int *const p; // p不可以变,p指向的对象可以变;d. constint *const p; //指针p和p指向的对象都不可以变;6. 修饰函数返回值:例如:constint fun(void);表示函数的返回值是不能被改变的,函数是一个只读函数。
PHP的变量是什么PHP的变量是什么PHP中的每个变量都有一个针对它的作用域,它是指可以在其中访问变量(从而访问它的值)的一个领域。
对于初学者来说,变量的作用域是它们所驻留的页面。
我们为大家收集整理了关于PHP的变量,以方便大家参考。
PHP的变量是什么1变量是程序中或以变化的量,用于存储数字、字符串或函数的结果。
一旦设置了某个变量,我们就可以在脚本中重复地使用它。
PHP 中的所有变量都是以 $ 符号开始的。
在 PHP 中设置变量的正确方法是:$var_name = value;PHP 的入门者往往会忘记在变量的前面的 $ 符号。
如果那样做的话,变量将是无效的。
下面我们创建一个存有字符串的变量,和一个存有数值的变量:$txt = "Hello World!";$number = 16;PHP 是一门松散类型的语言(Loosely Typed Language)在 PHP 中,不需要在使用变量之前先声明该变量。
在上面的例子中,您看到了,不必向 PHP 声明该变量的数据类型。
根据变量被设置的方式,PHP 会自动地把变量转换为正确的数据类型。
在强类型的编程语言中,您必须在使用前声明变量的类型和名称。
在PHP中,变量会在使用时被自动声明。
变量的命名规则变量名必须以字母或下划线 "_" 开头。
变量名只能包含字母数字字符以及下划线。
变量名不能包含空格。
如果变量名由多个单词组成,那么应该使用下划线进行分隔(比如$my_string),或者以大写字母开头(比如 $myString)。
PHP的变量是什么2变量是存储信息的容器:实例<?php$x=5;$y=6;$z=$x+$y;echo $z;>类似代数x=5y=6z=x+y在代数中我们使用字母(比如 x)来保存值(比如 5)。
从上面的表达式 z=x+y,我们能够计算出 z 的值是 11。
在 PHP 中,这三个字母被称为变量。
php const用法PHP const用法在PHP中,我们可以使用const关键字来定义常量。
常量是一个不可改变的值,它在定义之后不能被重新赋值。
常量的使用有很多场景,并且可以提升代码的可读性和可维护性。
下面是一些常见的const用法,以及对它们的详细讲解:1.定义常量使用const关键字可以定义一个常量。
常量名通常使用大写字母,并且使用下划线来分隔单词。
例如:const PI = ;在上述示例中,我们定义了一个名为PI的常量,其值为。
一旦定义了常量,就不能再改变它的值。
2.常量的作用域常量在定义后会被视为全局可见。
这意味着常量可以在代码的任何地方使用,而不受作用域的限制。
例如:const DATABASE_NAME = 'my_database';function getConnection() {echo 'Connecting to ' . DATABASE_NAME;}getConnection(); // 输出:Connecting to my_database 在上述示例中,我们在函数外定义了一个常量DATABASE_NAME,然后在函数内部使用了该常量。
函数能够访问并打印出该常量的值。
3.类常量在类中,我们可以使用const关键字来定义类常量。
类常量的定义与全局常量相似,但需要添加访问修饰符public、protected或private。
例如:class Car {const MAX_SPEED = 200;public function accelerate() {echo 'Accelerating up to ' . self::MAX_SPEED . ' km/h';}}$car = new Car();$car->accelerate(); // 输出:Accelerating up to 200km/h在上述示例中,我们定义了一个名为MAX_SPEED的类常量,并在类的方法中使用了该常量。
const与#define的优缺点?1.define由预处理程序处理,const由编译程序处理2.#define不分内存,因为它是预编译指令,编译前进行了宏替换。
const 不一定?某种说法,Const常量是占有内存的被“冻结”了的变量3.const定义常量是有数据类型的,这样const定义的常量编译器可以对其进行数据静态类型安全检查,而#define宏定义的常量却只是进行简单的字符替换,没有类型安全检查,且有时还会产生边际效应4.有些调试程序可对const进行调试,但不对#define进行调试。
5.const在编译期间会计算其值,而define不会6 当定义局部变量时,const作用域仅限于定义局部变量的函数体内。
但用#define时其作用域不仅限于定义局部变量的函数体内,而是从定义点到整个程序的结束点。
但也可以用#undef取消其定义从而限定其作用域范围。
只用const定义常量,并不能起到其强大的作用。
const还可修饰函数形式参数、返回值和类的成员函数等。
从而提高函数的健壮性。
因为const修饰的东西能受到c/c++的静态类型安全检查机制的强制保护,防止意外的修改。
二、const与c++看了传递方式后我们继续来谈“const只能用于修饰输入参数”的情况。
当输入参数用“值传递”方式时,我们不需要加const修饰,因为用值传递时,函数将自动用实际参数的拷贝初始化形式参数,当在函数体内改变形式参数时,改变的也只是栈上的拷贝而不是实际参数。
但要注意的是,当输入参数为ADT/UDT(用户自定义类型和抽象数据类型)时,应该将“值传递”改为“const &传递”,目的可以提高效率。
例如:void fun(A a);//效率底。
函数体内产生A类型的临时对象用于复制参数 a,但是临时对象的//构造、复制、析构过程都将消耗时间。
void fun(A const &a);//提高效率。
用“引用传递”不需要产生临时对象,省了临时对象的//构造、复制、析构过程消耗的时间。