PHP基础

PHP的四种代码风格

XML风格:使用最广泛的风格<?php echo'<p>Hello world</p>';?>

简短风格:遵循SGML处理说明的风格,在大多数环境的默认配置中不支持<? echo '<p>Hello world</p>'; ?>

SCRIPT风格:<script language='php'>echo '<p>Hello world</p>';</script>

ASP风格<% echo '<p>Hello world</p>';%>默认禁用

PHP解释器会运行脚本并用脚本的输出替换脚本本身,也就是说,即使源码含有PHP代码,但是我们在浏览器中可能并不会看见

空格:任何间隔字符都会被当做是空格,比如说换行、空格、制表符

注释:PHP支持C\C++\Shell脚本风格的注释,如/**///#

变量:PHP脚本的变量一大特点便是都以$符号开始,通过变量我们有3中方式来访问表单数据

方法一:$data:默认关闭

方法二:$_POST['data']、$_GET['data']、$_REQUEST['data']不管是通过post还是get方式提交的表单都可以通过request来获得

方法三:HTTP_POST_VARS['data']:已过时

字符串的连接:可以将变量与字符串连接在一起输出,方式是多样的

方法一:echo $data.'haha<br/>';

方法二:echo "$data haha<br/>";请注意这里的双引号,双引号当中的命令会被执行,但是如果换成单引号则会被当做一个纯文本来输出

文本:除了上面单双引号表示法以外,还有一种指定字符串的方法

heredoc语法:

echo <<<theEnd
line 1
line 2
line 3
theEnd

theEnd标记不会出现在文本中

标识符:变量的名字是严格区分大小写的,但是函数却可以大小写混写

变量与常量:PHP支持integer\float\string\boolean\array\object\null\resource这几种数据类型,其中source通常被函数返回,在创建变量的时候无需声明具体的变量类型,后面想要改变变量种类的时候也可以使用强制类型转换

$data = 0;整数类型
$data2 = (float)data;浮点类型

除了这些以外,我们还可以设定常量define('data3',100);,一但被设定,后面不得修改

常见变量:

$GLOBALS,所有的全局变量数组
$_SERVER,服务器环境变量数组
$_GET,通过GET方法传递给该脚本的变量数组
$_POST,通过POST方法传递给改脚本的变量数组
$_COOKIE,cookie变量数组
$_FILES,与文件上传有关的变量数组
$_ENV,环境变量数组
$_REQUEST,所有用户输入的变量数组,包括上面的$_GET\$_POST\$_COOKIE,4.3版本后不包括$_FILES
$_SEESSION,会话变量数组

可替换的控制结构语法:PHP的if\switch\while\for等等语法与其他语法大同小异,但是PHP可以对部分语法进行替换,它使用冒号替换花括号,使用新关键字来结束代码块,但是do-while没有可替换

例如

if($data==1)
{
    echo "haha!<br/>";
    exit
}

可被换成
if($data==1):
echo "haha!<br/>";
exit;
endif;

另有一种控制结构叫做declare结构

declare(directive)
{

}

数据存储与检索

打开文件:PHP使用fopen()函数来打开文件,同时需要选择文件模式来确定对文件进行什么$data4 = fopen("$DOCUMENT_ROOT/../haha.txt",'w');,此处我们使用了内置变量$_SERVER['DOCUMENT_ROOT']来袋子web服务器文档树的根,并使用..来返回上一级目录, $DOCUMENT_ROOT=$_SERVER['DOCUMENT_ROOT'];

我们一共有三种方式可以获取到文档的根目录

$_SERVER['DOCUMENT_ROOT']首选风格
$DOCUMENT_ROOT
$HTTP_SERVER_VARS['DOCUMENT_ROOT]

文件模式:

r只读
r*只读
w只写
w+只写
x谨慎写,如果文件已经存在,则该文件不会被打开
x+谨慎写
a追加
a+追加
b二进制
t文本

除了使用路径,我们也可以使用FTP或者HTTP的方式来打开文件,其文件名开头如ftp://或者http://www.xxxx.com/,要注意http的目录地址必须以斜线为结束,url中域名可能不会区分大小写,但是路径名和文件名会

写文件:我们可以使用fwrite()或fpute()函数来进行对文件的写入,方式为fwrite($fp,$outputstring,length),将后面的内容写到前面那个所指向的文件中,第三个参数是控制最大字符数,可以不写

关闭文件fclosc($fp)

判断是否读完文件feof($fp),这个函数的唯一参数是文件指针,如果这个指针指向了文件末尾,那他会返回true

读取一行数据:我们可以使用几个不同的函数来读取一行的数据

$order = fgets($fp,n);这个函数将从文件里面不停的读数据,直到读到换行符或者文件结束符EOF或者从中读取了n-1个字符

另外也可以使用fgetss(),fgetcsv()

读取整个文件

方法一:readfile("$DOCUMENT_ROOT/../orders/xx.txt"),这个可以直接把文件打开并把文件内容输出到浏览器中再关闭这个文件

方法二:fpassthre($fp),想要使用这个函数,必须现在之前用fopen()吧文件打开

方法三:$filearray = file($DOCUMENT_ROOT/../xx.txt)file()函数会把结果发送到一个数组里面

读取一个字符fgetc($fp)

读取任意长度fread($fp,n),从文件中读出任意长度

查看文件是否存在file_exists("$DOCUMENT_ROOT/../xx.txt")

查看文件大小filesize("$D...")

删除一个文件unlink($D...)

文件锁定flock($fp,操作值)

操作值:LOCK_SH\LOCK_EX\LOCK_UN\LOCK_NB,分别为:读操作锁定,可以共享、写操作锁定,不能共享、释放已有的锁定、防止在请求加锁时发生阻塞

数组
创建数组的方式可以有以下几种:

$data=arrar('j','sd','afwda');
$numbers = range(1,10);
$price=array('Tires'=>100,'oil'=>10);以关键字来创建关联数组,后面可以以$price['Tires']这种方式才访问数组内容
或者也可以这样
$price=array('Tires'=>100);
$price['Oil']=>10;

$a=array(array('1','2','3'),
         array('a','b','c'));

关联数组的循环:关联数组的索引不是数字,无法使用for语句进行循环,但是可以用foreach循环或者list()和each()

foreach($price as $key => $value){}

while($element = each($price)){}

while(list($name,$price) = each($price)){echo $name - $price<br/>";}将后面的变量赋值给list中的变量

数组排序sort($array),asort()关联数组按照元素值排序,ksort()关联数组按照关键字排序

格式化字符串addslashes()或stripslashes(),这种函数会自动把一些特殊字符如双引号进行转义以免在数据库中引起歧义

函数

require()和include()函数:这两个函数都可以把一个文件加载到PHP脚本当中

a.php
<?php echo 'haha'; ?>

main.php
<?php
echo 'you?';
require('a.php');
echo 'emmm';
>
当浏览器载入main.php,你会发现require那行会被a.php替代掉

通常来讲,PHP语句如果被放在html文件里面,被加载的时候里面的语句是不会被执行的,但是,如果是require的话,他不管文件的扩展名是什么,他都会执行里面的命令

phpinfo():这个函数将返回PHP信息、Web服务器的配置等等信息

自设函数

function f_name(参数)
{

    xxx;
}

class classname
{
    public $data1;
    function op1()
    {

    }
    function _construct($param)构造函数
    {}
    function _destruct()析构函数
    {}
}


$a = new classname("wow");实例化

class classname2 extends class{}类的继承

其他与其他语言大差不差

异常处理

<?php
try{
    throw new Exception("Something going wrong",42);
}
catch(Exception $e)
{
    echo "Exception".$e->getCode().":".$e->getMessage()."<br/>"."in".$e->getFile()."on line".$e->getLine()."<br/>";
}
?>

代码在try代码块被调用执行,如果try代码块出现某些错误,可以执行一个throw跑出异常,try代码块之后,必须至少给出一个catch代码块,可以将多个catch代码块与try进行连接,上面是一个捕获Exception类的异常的写法,传递给catch代码块的对象就是导致错误并传递给throw的对象,该异常可以是任何类型

avatar

标签: none

评论已关闭