php入门小知识汇总

数组遍历

for($i = 0;$i <5;$i++){
    $ar[] = $i;
}

数组变量=值,会自动叠加,而不是清空

extract函数

从K-V数组中将变量导入当前域。数组的键作为变量名,数组的值作为变量的值。

PHP常量和变量、全局变量、对象缓冲、数据库连接缓冲

内置常量:
1.$GOBALS 所有全局变量数组
2.$_SERVER 服务器环境变量数组
3.$_POST 通过POST方法传递给该脚本的变量数组
4.$_GET 通过GET方法传递给该脚本的变量数组
5.$_COOKIE cookie变量数组
6.$_FILES 与文件上传相关的变量数组
7.$ENV 环境变量数组
8.$_REQUEST 所有用户输入的变量数组包括$_GET $_POST $_COOKIE所包含的输入内容
9.$_SESSION 会话变量数组

自定义常量:
常量一旦被声明,全局可见,但必须要在每要用到的页面通过include或require引用才行。

PHP是一种纯解释型服务端脚本语言。请求一个PHP脚本,PHP会读取该脚本,并将其编译成Zend操作码。随后,操作码由PHP执行并丢弃。PHP脚本在每次解释时进行初始化,在解释完成后终止运行。这种运行是互相独立的,每一次请求都会创建一个单独的进程或线程,来解释相应的页面文件。页面创建的变量和其他对象,都只在当前的页面内部可见,无法跨越页面访问。在运行终止后,页面中申请的、没有被代码电焊工释放的外部资源,包括内存、数据库连接、文件句柄、Socket连接等都会被强行释放 。也就是,PHP无法在语言级别上实现直接访问跨越页面的变量,也无法创建驻留内存的对象。

<?php
class StaticVarTester {
    public static $StaticVar = 0;
}

function TestStaticVar() {
    StaticVarTester :: $StaticVar += 1;
    echo "StaticVarTester :: StaticVar = " . StaticVarTester :: $StaticVar;
}

TestStaticVar();
echo "<br / >";
TestStaticVar();
>

这段代码如果写在Java中,$StaticVar 由于是静态的,一旦被初始化,就会长驻在内存中。多次运行页面,$StaticVar会得到累加。
而PHP独立的工作模型,每次解释页面时都会执行一次程序初始化和终止的过程。因此每次请求都是独立的,无论运行多少次页面(刷新页面),$StaticVar的结果都是一样。

对象缓冲(缓存):众所周知,很多设计模式都依赖于对象缓冲,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源,因此对于高并发WEB应用应当尽量减少对象的创建和销毁,由于PHP不支持多线程,无法像Java一样通过线程池调度来弥补这一缺陷;但可以通过第三方软件来实现。
数据库连接缓冲(缓存):对于Mysql,PHP提供了一种内置的数据库缓冲机制,即使用mysql_pconnect()代替mysql_connect(),但这种连接缓存往往会导致数据库连接的伪泄漏现象:在某时刻,并发的数据库连接过多,超过了Mysql的最大连接数,从而导致新的进程无法连接数据库。

PHP mysql 长连接、连接池的问题

php连接mysql的方式,常用有mysql扩展,mysqli扩展,pdo_mysql扩展,这些方式是官方提供的。
php的运行机制是页面执行完会释放该php进程中所有资源,如果有多个并发访问同一个页面,php会开相应的线程或进程去处理该请求,请求完释放结果。也就是php无法从语言层面 从页面到页面之间传递数据。
长连接的作用是在高负载情况下,通过利用长连接,减少每个请求建立连接、销毁连接所消耗的时间和资源。

PHP 并发模型,多进程,多线程

  • PHP本身是线程安全的。
  • PHP支持多线程并发,也支持多进程并发,取决于用哪个SAPI,比较推荐的php-fpm使用的是多进程模型。HHVM使用的是多线程模型。
  • php-fpm多进程模型的优势:
    1. 内存释放简单,fpm通过进程直接退出方式有效解决内存泄露的问题。
    2. 容灾能力强,扩展或者php可能出现错误,如果单进程多线程模型,那么整个PHP都会挂掉,而多进程模型,某个进程死掉不会影响整体服务。

局部静态变量

局部静态变量即为在方法中的使用static修改的变量
静态局部变量不能被外部使用,一旦被创建,多次进入函数,局部静态变量不会被重新初始化。

include \ require \ include_one \ require_one的区别和用法

  1. 当引用不存在的文件时,include只会报警告,脚本会继续执行。而require会导致一个致命错误,停止执行。
  2. include是有条件包含函数,而require是无条件包含函数。即require函数总会执行。
  3. include_one与require_once会先检查函数是否被包含,如果已经包含过,则不再包含。
  4. include执行时每次都会进行读取和评估。require文件只处理一次,实际上是将要引入的内容替换了require语句。因此从性能上说,require会优于include
  5. 常用法:
    require通常放在PHP程序的最前面,PHP程序在执行前,就会先读入require所指入的文件,使它变成PHP程序的一部分。
    include一般放在流程控制的处理部分中。PHP程序读到include的文件时,才将它读进来。
  6. 被包含文件使用return 时,在include.require可以获取其返回值。

类相关

一个php文件可以有多个类

魔术常量

魔术常量即他是系统预定义的常量,但他并非不可变,他们的值 会随它们在代码中的位置改变与改变。
常用的魔术常量:
1. __LINE__ 返回当前行号
2. __FILE__ 文件的完整路径和文件名,如果用在被包含文件中,则返回被包含文件名。PHP4后值总是一个绝对路径
3. __DIR__ 文件所在目录,如果用在被包含的文件中,则返回被包括的文件所在的目录,等价于dirname(__FILE__)
4. __FUNCTION__ 返回函数的名字
5. __CLASS__ 返回类名PHP5.4对Trait也起作用
6. __TRAIT__ 返回Trait名字
7. __METHOD__ 类方法的名字,包含命名空间
8. __NAMESPACE__ 当前的命名空间

defined与isset函数

bool defined(String $name) 检查一个常量是否存在
只能检查一个常量
如果需要检查变量是否存在使用isset()
如果需要检查一个函数是否存在 function_exists()

定义一个常量的方法
define(“NAME”,”CGZ”);
常量的定义应避免使用*的形式,因为PHP本身有内置的常量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值