PHP,即"PHP:Hypertext Preprocessor",是一种被广泛应用的开源通用脚本,尤其适用于Web开发并可嵌入HTML中去。它的语法利用了C、Java、Perl,易于学习。该语言的主要目标是允许web开发人员快速编写动态生成的web页面,但PHP的用途不止于此。

 

<html>
    <head>
        <title>Example</title>
    </head>
    <body>

        <?php
        echo "Hi, I'm a PHP script!";
        ?>

    </body>
</html>

 

这个范例和其他用C或者Perl语言写的脚本之间的区别--与用大量的命令来编写程序以输出HTML不同的是,PHP页面就是HTML,只不过在其中嵌入了一些代码来做一些事情。PHP代码呗包含在特殊的“起始符和结束符<?php ?>”之间,使得可以进入‘PHP模式’。

和客户端的JavaScript不同的是,PHP代码是运行在服务端的。如果在服务器上建立了如上例类似的代码,则在运行该脚本后,客户端就能接收到其结果,但他们无法得知其背后的代码是如何运作的。甚至可以将web服务器设置成让PHP来处理所有的HTML文件,这么一来,用户就无法得知服务端到底做了什么。

使用PHP的一大好处就是它对于初学者来说极其简单,同时也给专业的程序员提供了各种高级的特性。

PHP能做任何事。PHP主要是用于服务端的脚本程序,因此可以用PHP来完成任何其他CGI程序能够完成的工作,例如手机表单数据,生成动态网页,或者发送/接收Cookies。

PHP脚本主要用于一下三个领域:

  • 服务端脚本。这是PHP最传统,也是最主要的目标领域。开展这项工作需要具备以下三点:PHP解析器(CGI或者吴服务器模块)、web服务器和web浏览器。需要在运行web服务器时,安装并配置PHP,然后,可以用web浏览器来访问PHP程序的输出,即浏览服务器端的PHP页面。如果只是实验PHP编程,所有的这些都可以运行在自己家里的电脑中。
  • 命令行脚本。可以编写一段PHP脚本,并且不需要任何服务器或者浏览器来运行它。通过这种方式,仅仅需要PHP解析器来执行。这种用法对于依赖cron(Unix或者Linux环境)或者Task Scheduler(Windows环境)的日常运行脚本来说是理想的选择。这些脚本也可以用来处理简单的文本。
  • 编写桌面应用程序。对于有这图形界面的桌面应用程序来说,PHP或许不是一种最好的语言,但是如果用户非常精通PHP,并且希望在客户端应用程序中使用PHP的一些高级特性,可以利用PHP-GTK来编写这些程序。用这种方法,还可以编写跨平台的应用程序。PHP-GTK是PHP的一个扩展,在通常发布的PHP包中并不包含它。

PHP能够在所有的主流操作系统上使用,包括Linux、Unix的各种变种(包括HP-UX、Solaris和OpenBSD)、Windows、Mac OS X 、RiSC OS等。今天PHP已经支持了大多数的web服务器,包括Apache、Microsoft Internet Information Server(IIS)、Personal Web Server(PWS)、Netscape 以及iPlant server、Oreilly WebsitePro Server、Caudium、Xitami、OmniHttpd等。对于大多数的服务器,PHP提供了一个模块;还有一些PHP支持CGI标准,使得PHP能够作为CGI处理器来工作。

综上所述,使用PHP,可以自由的选择操作系统和web服务器。同时,还可以在开发时选择使用面向过程和面向对象,或者两者混合的方式来开发。PHP4不支持OOP的所有的标准,PHP5弥补了PHP4的这一弱点,引入了完全的对象模型。

使用PHP,并不局限于输出HTML。PHP还能被用来动态输出图像、PDF文件甚至Flash动画(使用libswf和Ming)。还能够非常简便的输出文本,例如XHTML以及任何其他形式的XML文件。PHP能够自动生成这些文件,在服务端开辟出一块动态内容的缓存,可以直接把它们打印出来,或者将它们存储到文件系统中。

PHP最强大最显著的特性之一,是它支持很大范围的数据库。使用任何针对某数据库的扩展(例如mysql)编写数据库支持的网页非常简单,或者使用抽象层如PDO,或者通过ODBC扩展连接到任何支持ODBC标准的数据库。其他一些数据库也可能会用cURL或者sockets,例如CouchDB。

PHP还支持利用诸如LDAP、IMAP、SNMP、NNTP、POP3、HTTP 、COM(Windows环境)等不计其数的协议的服务。还可以开放原始网络端口,似的任何其他的协议能够协同工作。PHP支持和所有的web开发语言之间的WDDX复杂数据交换。关于相互连接,PHP已经支持了对Java对象的即时连接,并且可以透明的将其作用PHP对象。

PHP具有极其有效的文本处理特性,包括Perl兼容正则表达式(PCRE)以及许多扩展和工具可用于解析和访问XML文档。PHP将所有的XML功能标准化于坚实的libxml2扩展,并且还增加了SimpleXML,XmlReader以及XMLWriter支持以扩充其功能。


常用PHP函数(菜鸟教程):

 

那么问题来了~

先理解基本概念

什么是PHP变量

!!!变量是存储信息的容器。

<?php
$x=5;
$y=6;
$z=$x+$y;
echo $z;
?>

类似于数学中代数,使用字母来保存值。在php中,这些声明的字母被称之为变量。

PHP变量规则:

  • 变量以$符号开头,其后是变量的名称
  • 变量名称必须以字母或者下划线开头且不能以数字开头
  • 变量名称只能包含字母、数字、下划线
  • 变量名称对大小写敏感($y与$y是完全不同的两个变量)

如何使用

一般的逻辑来说,函数需要先声明才能调用,but,在php中是没有创建变量的命令的,如果是全新的变量,变量会在首次为其赋值时被创建。

<?php
$txt="Hello world!";
$x=5;
$y=10.5;
?>

上边实例中,变量txt会保存值 Hello world!,变量x会保存值 5,变量y会保存值10.5。上边看到,不同类型的数据在赋值时的要求不同,比如字符串(文本)在为变量赋值时需要用引号包围。

php是一门类型松散的语言

不必告知php变量的数据类型  php会根据它的值,自动把变量转换成正确的数据类型。属于弱类型语言。强类型语言与弱类型语言的区别感兴趣可以自己google或者百度~

php变量的作用域

变量可以在脚本的任意位置进行声明。变量的作用域指的就是变量能够被引用/使用的那部分脚本。

作用域分为三种:local(局部)、global(全局)、static(静态)

在函数之外声明的变量拥有Global作用域,只能在函数以外进行访问。

函数内部生命的变量拥有Local作用域,只能在函数内部进行访问。

 

全局变量:在函数外部定义的变量,称为“全局变量”,全局变量在网页关闭后消失。

局部变量:在函数内部定义的变量,称为“局部变量”,局部变量在该函数执行完毕后消失。

 

总计一下,可以把Global看做是一整个大的区域,Local看做是与Global互不覆盖的块状区域,Global为整体,Local为局部。

 so,可以在不同的函数中创建名称相同的局部变量,因为局部变量只能被各自函数识别。

 

php变量作用域与js的区别

在js中,全局变量,可以直接在函数内部使用(继承),在php中,全局变量,不能直接在函数内部使用(内外不通)。

 

but,global关键字来了,它主要作用是用于在全局作用域内访问函数内的本来是local的变量,即在函数内部给变量赋值时,在变量前面使用global关键字。此时在函数外也可以正常访问函数内声明global的变量!!

PHP 同时在名为 $GLOBALS[index] 的超全局数组变量中存储了所有的全局变量。下标存有变量名。这个数组在函数内也可以访问,并能够用于直接更新全局变量。

同为超全局数组变量:$_GET[index]、$_POST[index]、$_SERVER[index]、$_REQUEST[index]、$_COOKIE[index]、$_FILES[index]、$_GLOBAL[index]。

超全局数据变量,可以在任何地方使用(函数内部和函数外部)。

$_GLOBALS全局数据包括有:$_GET、$_POST、$_FILES、$_COOKIE、自定义全局变量。

php static关键字

通常,当函数完成/执行后,会删除所有变量。也就是说函数内的局部变量在执行完毕函数后就消失了。不过,有时需要不删除某个局部变量,就是说需要局部变量在函数执行完毕后不消失。这时,在首次声明变量时使用 static 关键词(值一般为字符或者数值),这样在每次调用该函数时,这个static声明的变量所存储的信息都是最后一次被调用时所包含的信息。当然,该变量作用域仍为局部变量。

那么...

什么是PHP函数

简单来说,讲一段常用的功能代码起个名字,这个有名字的代码段,就叫“函数”。

使用函数,可以提高工作效率。只要在一定范围内,函数是可以灵活调用供你使用。

函数是先定义后调用。函数代码,优于其他代码读入内存。

函数的定义格式:

function functionName(形参1,形参2,...)
{
    函数的功能代码;
    return 参数
}

格式说明:

 

function是关键字,不区分大小写,建议小写。

functionName 是函数名称,与变量名称一样,不带'$'前缀。函数名不区分大小写。

()中的是“形参”,主要用来接收“函数调用者”在调用函数时所传过来的“原始数据”,形参之间用‘,’隔开。

{}中是函数的功能代码。

函数调用

函数无所谓是先定义,还是先调用,因为,函数代码优先于其他代码先读入内存(上边强调过)。

调用函数,直接写函数名,后边跟一个(),可以按函数定义是决定是否带参数。

 

参数在整体上分为形参和实参。

形参(形式参数):

在定义函数时的参数。

形参只能是变量,不能是常量、函数定义、类定义等。

形参只能在函数内部使用。

形参是一个临时变量。

形参主要用来接收“函数调用者”传递过来的“数据”。

实参(实际参数):

在调用函数是传递给函数的“真正的数据”。

实参的个数和顺序应该与形参定义时一致。

实参类型可以是具体的值,也可以是变量。

贴个老图:

默认参数:

假如说  实参的个数少于形参的个数,如果不做特殊处理是会报错的,那么我们可以在形参中,使用默认值来代替补充那个缺少的实参,也就是说,如果我的形参有默认值,那么部分实参就可以忽略。

参数传递方式

值传递

在给调用函数时,函数的默认传值方式,就是“值传递”、“拷贝传值”。

即将实参的值,“复制”一份传给形参使用。整型、浮点型、布尔型、字符型、NUll、数组等都是“值传递”。

即传递的值变化对原变量无影响,是两个独立的个体(指针、堆栈啊什么的可以参考下)。

引用传递

“引用传递”是将实形的“数据地址”,复制一份,传给形参,这样一来,“形参”和“实参”,指向的是“同一份数据”。此时如果该“数据”被修改,那么形参和实参将会一起改变。

在php中,对象、资源 这两个数据类型是引用传递,那么其他数据类型默认是值传递,so,如果其他数据类型也想使用引用传递,那么需要在“形参”前加一个“&”符号。

在实参个数不确定前提下使用的函数:

func_num_args()、func_get_args()、func_get_arg($i)

 

在函数中,调用自己,就是“递归调用”。调用别的函数,就是“函数嵌套”。

 

编程思想:

一般编程思想主要分为面向过程,和面向对象。

面向过程编程介绍:将要解决的问题(任务),分解成若干个步骤(分任务),并依次按顺序执行这些步骤,最终完成结果。

面向对象编程介绍:将要解决的问题(任务),分解成若干个相互独立的“运行体”(物体),每个运行体都可以用来完成其自身所能做的工作,他们何在一起就能够完成最终想要的结果。

编程的主要思想还是面向对象编程(OOP)。

所以面向对象的基本概念:

类:一些具有同类特征信息的物体的同城,是这类问题的一种抽象模型。

对象:是一个个具体的“物体”,是按照“类”所定义好的模式(特征信息)而创造出来的具体物。是“类”的实例。

对象的传值默认也是使用“值传递”(类似于函数参数)----虽然在大多数应用是变现类似于引用传递。但是只有使用了“&”符号,才能够构成“引用传递”。

 

类中成员:

实例属性和实例方法:就是隶属于对象的属性和方法,因为一类可以有多个对象,所以他们可以有若干份。

他们都是通过对象来调用的:   $对象->属性名;  //可赋值可取值;         $对象->方法名([实参。。]);

静态属性和静态方法:他们隶属于类的属性和方法,那么对一个类来说,只有一份。关键字 static

所以通过类来调用他们:   类名::属性名;   //可赋值可取值;    类名::方法名([实参。。。]);

类常量

调用方法:类名::常量名;

$this关键字/self关键字

$this:代表调用其所在方法的那个对象背身,关键字在于对象。

self:代表代码中所在的那个类本身,关键字在于类。

构造函数(构造方法):

一个特殊方法,也被称为魔术方法,他是魔术方法之一。具有固定的名字:__construct()

调用机制为,在new一个类的时候,自动调用__construce()方法,并且在调用的时候,需要遵循调用方法是的“规则”:实参与形参相对应!!

主要作用就是希望在某一类创建(new)的时候,就马上去完成某些工作----通常是对该对象的数据进行“初始化”(赋值等)。

析构函数(析构方法)

与构造函数相对应,是一个对象被销毁时自动调用的方法,名字为:__destructor()    该方法是没有参数的。

 

访问控制

所谓访问控制,就是在一个类中规定其成员“是否可访问”(使用)的一定控制机制。

具体表现在语法中,体现在两个可用性  $对象->成员  //成员包括属性和方法    类::成员   //成员包括属性、方法、和常量

访问修饰符

public:公共的,表示该成员“在哪里都可以访问”。

对于属性,原来的var就是public的同义词,推荐使用public,对于方法,可以省略访问修饰符,默认的访问修饰符为public

protected:受保护的,表示该成员只有“在自己家族内部可以访问”。准确是指一个类的自己的内部和与其具有继承关系的类的内部可以访问。

private:私有的,只有在自己内部才能够访问。

此时就和访问的位置有关了(即代码的位置)

位置主要分为三种:

某一类的内部:可以访问该类的任何成员;

某一类继承关系类的内部:击沉关系类内部可以访问该类的“公共成员”和“受保护成员”;

某一类的外部:只能够访问该类的“公共成员”。

 

设计模式

在面向对象领域里的一些常见的通用任务所总结出来的代码模式!是一种经验总结。

工厂模式:

所谓工厂,就是指生产“产品”的地方。所谓的产品在这里就是生产对象(创建对象)!!

设计一个类(工厂类:Gongchang),这个类可以做到,在有需求的时候可以生产(创建)指定类(其他应用类)的对象。

想法为:想要生产A这个类的对象,找工厂类  Gongchagn::GetObject('A');    此时得到的结果就是得到了A的对象。

个人认为这个模式方便了对类的实例化

单例模式:

顾名思义就是指设计一个类,这个类只能(允许)实例化出一个对象。

关键点

1.将构造方法私有化,禁止外界随意的new对象。

2.定义一个静态方法,由于静态方法的特性,该方法用来判断并生该类的唯一对象。

3.在静态方法内定义静态变量,用于储存唯一对象。

4.在静态方法内判断是否有该类对象后执行new操作并返回对象或直接返回对象。

简单示例如下:

//单例类
class Single
{
    //构造方法私有化,进制外界new
    private function __construct()
    {
        //可以为空,主要作用就是使用private访问修饰符来控制访问区域。
    }
    //定义静态方法,该方法用来判断并生成该类的唯一对象
    static function GetSingleObject()
    {
    //定义静态变量,用于存储唯一的实例化对象,静态变量特性:数据在函数(方法)调用结束后仍然存在
        static $obj = null;
        //判断操作
        if(empty($obj){    //如果当前类实例化对象不存在,则创建并返回
            $obj = new self();
            return $obj;
        }else{    //如果已有当前类的实例化对象,则直接返回实例化对象
            return $obj;
        }
    }
}

此时调用该类!!

$n1 = Single::GetSingleObject();

$n2 = Single::GetSingleObject();

使用var_dump函数验证时表明为同一个对象。此时可以保证在这一脚本内只有一个实例,有效节省资源。

 

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐