PHP语言速成

来源:互联网 发布:php替换字符串中一部分 编辑:程序博客网 时间:2024/05/22 14:45

跟javascript 差不多,也是个脚本语言,我也用一篇文章写完也没问题吧?

关于javascript的基本语法 http://blog.csdn.net/skyjie6/article/details/38659407


第一章、使用PHP

PHP的开始标记和结束标记

①<?PHP             ?>

如果将php.ini中的short_open_tag设置为On,可以简写为<? 和?>

②<%             %>    

这个是ASP风格,需要将php.ini中的asp_tags设置为On

③<script language="PHP">                     </script>           

html语法来的


嵌入HTML

不同javascript的是,PHP更多放在<body>  </body>标签之间

<html><head><title>第一个PHP程序</title></head><body> <?PHP    echo "helloworld- -!" ;   echo "使用PHP!" ;    //双斜杠是注释,echo是输出语句                        # 井号也是注释                       /*   这个也是注释   */?></body></html>



第二章、基本元素

常量

define("JIE","576984704");

这样JIE 就是一个常量了,而且再次使用define也不能修改.

变量

boolean     布尔类型,true和TRUE不区分大小写
integer       整形,4个字节
float,           也叫做double
string          字符串
array           数组类型
object         对象类型
resource    资源类型
NULL          空值
伪类型         如mix(字符串或数组),number(整形或浮点型),callback(回调)

<pre name="code" class="php"><?PHP    $a="10个变量";      //使用$ 表示一个变量    $b=2;    $c=TRUE;    $b=$a;         //值传递,此时b的类型变为string    $c=&$a;        //地址传递    $d=$a * 2;     //类型转换,此时d的值是20;?>
运算符
加减乘除求余:+ - * /  %
赋值运算符   =
位运算符    &按位与,   | 按位或,   ^ 按位异或,  ~ 按位非,  << 左移    >>右移
比较运算符    ==    ===   != (<>)  !==  >  <
执行运算 :  反引号 '  '  ,作用相当于shell_exec()函数,执行一个系统命令
++运算符:   ++$a,   $a++
逻辑运算符:    and(&&)  ,  or (||)  , !  , xor 异或  
字符串运算符:  .  点,用来标示连接前后两个字符串,相当于+

语句

条件语句

if(......) 
elseif(..........)
else    ...........
switch()
循环语句
while(...)
do while(...)
for( ;  ;  ;)
continue  
break;

字符串

通常用一对单引号,或者一对双引号括起来
                      'hello'           "hello"
如果要输出引号,记得加 \  作为转义
其他转义符号   \n换行        \r 回车         \t  Tab
字符串变量可以看做数组
$a[1] 表示第二个字符
函数
int  strlen( 字符串,字符编码)    获取长度,编码默认是ANSI编码,中文是GBK或者gb2312
int strcmp(string, string )    区分大小写的比较,前者大返回正数, 小返回负数, 等返回0
int strcasecmp(string,string)   同上,不过是不区分大小写
int strcpn(string &subject, string $mask, int $start,int $length)    返回subject中第一组字符串的长度,该字符串要求全部元素都能在mask中找到
int strcspn(string &string1, string $string2, int $start,int $length)  返回string1中第一个能在string2中找到的元素的位置
mixed str_replace(mixed $search, mixed $replace, mixed $subject, int &$count) 将subject的search替换为replace,count是替换次数
string strtr(string $str , string $from ,string $to)  将str 字符串中的from 改为to
string nl2br( string)      将字符串中所有"\n" 换成 <BR>   这样在HTML中才会换行
htmlentities(string , quotestyle, character-set)   转换为HTML的实体
array parse_url( string $url)            解析URL字符串,返回一个数组,分别存放scheme,host,user,pass,path,query,fragment;
string urlencode( string $str)          URL编码.将非字母数字和"-" " _ " "." 的字符转化为%跟两位16进制.
string urldecode( string $str)          URL解码,就是跟上面的对着干

数组

他是内存上的连续空间
每个数组都有key值和value值
数组里面的元素可以是数组~~~(数组的数组
定义数组array(  key =>  value  )  不写key的话默认key是0,1,2,3...
print_r()函数可以打印arr的内容
也可以调用var_dump() 打印内容,连类型也打印
访问数组元素
$arr[key]
函数
array_unshift($array, 添加值1,添加值2.......)     在开头插入元素
array_shift(array &$array)                                   在开头删除一个元素
array_push($array, 添加值1,添加值2.......)        在数组尾插入元素
array_pop(array  &$array)                                   在数组尾删除一个元素
bool in_array(mixed $needle,  array $haystack, bool $strict)     在haystack中搜索needle,区分大小写的,如果strict是true还区分类型的
mixed array_search(mixed $needle ,array $haystack, bool $strict)      同上,不过返回的是第一次匹配的key值
array_key_exists(mixed $key, array $search)             search中搜索key值
array array_keys(array $input ,mixed $search_value, bool $strict)         返回所有key值,或者指定返回所有对应search_value的key值
array array_values( array $input)                                      返回所有value
int count(array   $arr)                                              array的数组元素个数
array array_count_values(array $input)                统计每个元素出现的次数,元素变成新数组的key值
mixed current ( array  &$array  )                       返回当前指针的元素
mixed  next(array &array)                                      使指针指向下一个位置
mixed  prev(array &array)                                      使指针指向前一个位置
mixed  end(array &array)                                      使指针指向最后一个位置
mixed  reset(array &array)                                      使指针指向第一个位置
foreach  ($array  as $value )                                历遍数组,每次value等于每一个元素
array array_unique(array $array)                        去掉重复的元素,保留key值的
bool asort( array &$array)                                  对value升序排序
bool arsort( array &$array)                                 对value降序排序
arrayarray_reverse ( array $array )                   反序
array array_fill(int $start_index,int $num,  mixed $value)         从第index开始填充num个value下去
array array_merge(array1,array2,...)                              合并数组
array array_chunk (array  $input, int $size,bool $preserve_keys) 从input中拆分大小为size的数组,第三个参数是否保留原名
number array_sum(array)                                       求数组元素总和
第三章、接受用户数据
这里说到用到的表单,用的是javascript,也不赘述了。
表单的提高数据方式分为
①GET提交方式
<form  id="form1"   method="get"   action="ShowInfo.php" >
使用GET方法提高数据时,URL格式就是  http://网址/处理脚本?参数名=参数值
例如在百度随便搜点东西,然后看他的网址就是这种啦
在PHP中, $_GET[ 参数名]  读取GET提交的表单数据

②POST提交方式
因为url长度有限,同时有些数据(如账号密码)不想被人看到,就可以采用POST方式
$_POST[参数名]  获取数据

③POST 和 GET 混合使用
<form  id="form1"   method="post"   action="ShowInfo.php?flag=1" >
POST来提交数据,flag=1表示脚本参数,是GET的一种

验证表单
这个只要在提交按钮加上 onclick="abc(this.form)" 即可
其中abc(this.form) 是自己定义的一个函数

用户名
密码    


像上面的

<form method="POST" action="check.php">用户名<input type="text" name="txtUserName" value="输入用户名" size="20" /><br />密码    <input type="password" name="txtPwd" size="20" /><br /><input type="submit" value="登陆" name="B1" /><br /><br /></form>

其中
<script language="javascript">function form_onsubmit()obj{if(obj.txtUserName.value==""){alert("请输入用户名";return false;}if(obj.txtPwd.value==""){alert("请输入密码";return false;}}</script>

check.php
<?PHP   $UID=$_POST['txtUserName'];  $PWD=$_POST['txtPwd']; if($UID =="admin" and PWD =="pass")   echo("您已经登陆成功"); else  echo("登陆失败");?>

POST方法上传文件

像上面,简单几句话,其中enctpe="multipart/form-data" 是上传文件固定格式

<form nam="form1" method="post" action="upfile.php" enctype="multipart/form-data"><input type="file" name="file1" style="width:80%" value="" />        <input type="submit" name="Submit" value="上传" /></form>

可以使用$FILES[文件name][内容]来访问

$FILES['file1']['NAME'] :表示文件名称

upfile.php

<?PHP  //getcwd()是返回当前工作目录  $upload_dir=getcwd(). "\\images\\";  if(!is_dir($upload_dir))                  //is_dir($filename) 判断文件或目录是否存在          mkdir($upload_dir);               //mkdir($pathname)   创建目录   function makefilename(){      $curtime=getdate(){                              //获取当前的时间       $filename=$curtime['year'].$curtime['mon].$curtime['mday']."jpeg";       Return $filename;   } $newfile=$upload_dir.makefilename(); if(file_exists($_FILES[file1]['tmp_name'])){          //file_exists($filename)判断文件是不是已经存在       move_uploaded_file($_file($_FILES['file1']['tmp_name'],$newfile);    //['tmp_name']是文件保存在服务端临时的文件名  }?>


第四章、自定义函数

跟其他语言有点像,格式如下

function 函数名 (参数){   函数体}

函数内的变量都是局部变量,当然函数内可以定义静态变量

静态变量:函数结束时不释放,而是保留下来,下次再调用这个函数时,值不变.

static  %count=1;       第一次调用时1,以后每次调用不一定是1;


参数可以按值传递,也可以是按引用传递(变量前加&)

如果参数后面有等号和数值,那么一开始就是有默认值

参数个数可变长,比如sum(),可以食sum(1,2,3,4,5,6,7);

return返回一个函数值,可以是任何类型.要返回多个值则可以返回数组.然后结束函数

func_num_args()     :返回有多少个传递给函数的参数

func_get_arg()          :返回传递给函数参数的列表

func_get_args()        :返回传递给函数参数的列表组成的数组

<?PHP  $a=100;        //全局变量  function setNumber(){  $a=10;       //局部变量  ,如果要在函数内使用全局变量的话应该加一句 global $a;  echo($a);             }  setNumber();   echo($a);     //此时$a还是100,局部变量在函数退出时已关闭.?>

引用函数库

函数一般不希望被用户看到,所以写在其他php文件中,然后需要时再导入,就可以用到里面的函数了

有以下几种方法:

①include("lib\mylib.php");

②require("lib\mylib.php");

③require_once("lib\mylib.php");

以上基本用法相同,不过当找不到要找的文件时,include发出警告,require是提出有错误.而require_once则是升级版,可以防止重复导入.


第五章、面向对象

<?phpclass  ABC                        //类名{  var $str="MYSTRING";            //定义成员变量,允许同时赋值  public   $a;                    //定义公有变量  private  %b;                    //定义私有变量  function output(){              //定义成员函数                    echo($this->str);                      }} ?>

同时也像其他语言那样有构造函数析构函数,他们都是规定名字

构造函数:  function  _construct()  {}

析构函数   function  _destruct ()    {}


使用定义new来定义一个对象

$mystr=new MyString('admin','pwd');

使用static 定义静态变量或者静态函数

静态变量和函数不属于任何一个实例化的对象.

例如user类里面有静态成员count.每当有个user对象产生时count++,销毁时count--.

而静态函数get_count用来获取count.

$this->count  对象成员 

$self::count   静态成员


继承:这个类似C++,不详细说

class B extends A          表达为B继承A.


使用abstract  修饰函数,变为抽象

抽象类函数是指如果有子继承,那么这个子类必须重载父类的抽象类函数,否则报错


复制对象

①直接用"="  :  $newcircle  = $mycircle;

②使用函数

function drawcircle ($shape){  if($shape  instanceof  shape){    //instanceof  判断是否某个抽象类              $shape -> draw();          }}
上面这里其实相当于一个虚函数.就是当参数是直线时,draw的对象是直线.是圆时,则draw圆


第六章、会话处理

HTTP为无状态的协议,每次请求都是独立的。

比如说购买界面你登陆了,但是评论界面还需要再登陆一次,因为界面间是独立的。

常用的有 cookieSession 两种方法


cookie

设置cookie

bool setcookie ( string $name , string $value, int $expire,string $path ,string $domain ,bool $secure ,bool  $httponly)

name 表示为Cookie名,  value 是值,     expire就是秒为单位的时间

path 是服务器路劲,该目录下能访问cookie

domain 是Cookie的域名,此域名下能访问

secure  是通过HTTP连接来传输Cookie

httponly       指定只有http协议才能访问

setcookie("TestCookie" , $value ,time()+60*60*24*30);  //创捷一个cookie,名字为TestCookie,值是变量value,时间是60*60*24*30秒,就是一个月

再来一例子:

<?phpif(isset($_COOKIE["num"]))  $num=$_COOKIE["num"];   //isset判断是否存在cookie                        else   $num=0;                //$_COOKIE 这个表示所有cookie的集合          $num=$num+1;          setcookie("num",$num,time()+60*60*24*30);?>

删除cookie

setcookie("TestCookie" ," ",time()-3600);  //时间设置为1小时前,相当于删除


平时常用的网站都有一周内自动登录,思考下是什么原理?

首先定义一个<input name="checkboxCookie"  type="checkbox"  checked>

然后用户名和密码的的值读取cookie  :<input type="text" name="username"  value="<?PHP echo($_COOKIE["username"]);?>  ">

然后提交按钮的处理脚本是check.php~~~表示要是成功登陆的话则保存信息


Session

session不同之处在于他是保存在服务器上的,分配每个用户一个对应的Session ID(SID)

开始会话:

bool  session_start(void);           会随机获得SID.

如果要自行设置SID的话:

string session_id(string $id)              写了id的话就是设置id,没写的话就是获取当前的id

string session_name(string $id)      效果同上的, 写了name的话就是设置name,没写的话就是获取当前的name


跟$_COOKIE一样,用$_SESSION表示session的全局数组

$_SESSION["last_visit"]表示上次访问网页的时间           $_SESSION["num_visits"]表示访问网页的次数

删除变量,也用于删除会话变量

void unset(mixed $var, mixed $var2,.......)

销毁会话

session_unset(void)                   //删除所有会话变量,但不删除文件和ID,相当于释放了$_SESSION

session_destroy(void)               //删除当前用户的文件和ID,但保留会话变量


第七章、MySQL数据管理

SQL语句就略过了

PHP使用MySQLi函数,需要找到php.ini

然后把;extension=php_mysqli.dll  前面的;删去,保存后复制到windows的目录下重新启动Acpache服务就可以了


连接数据库(三种方法

$mysqli=mysqli_connect "(服务器" ,  " 用户名" ,  " 密码" , "数据库名"  )

②上面的函数也可以改为 mysqli(服务器" ,  " 用户名" ,  " 密码" , "数据库名"  )

③使用mysqli_init()函数

$mysqli=mysqli_init();

$mysqli->real_connect(服务器" ,  " 用户名" ,  " 密码" , "数据库名"  )


执行SQL语句(二种方法

mysqli_query(连接对象,SQL语句)

$conn->query(SQL语句)           $conn是已经连接的


其他:

$conn->multi_query()  一次执行多个SQL语句

Sconn->store_result()   返回一个SELECT语句结果集

$conn->next->result()     获得下一个结果集


关闭数据库

mysqli_close($conn);


<?php   //第一步连接数据库  $conn=mysqli_connect("localhost","root","pass","MySQLDB")  if(empty($conn)) {                                                               //判断是否连接成功,die相当于exit(),退出当前脚本           die("mysql_connect failed:" .  mysqli_connect_error()  );                    }          mysqli_query($conn, "SET NAMES gb2312");                  //设置字体为utf8,不然是乱码          $query="SELECT EmpName FROM Employees;";          $query .="SELECT DepName FROM Department;";          if($conn->multi_query($query)){                         do{                          if ( $result = $conn ->store_result() )                                  {                                     while($row = $result->fetch_row() )    //获取一条记录                                             {     echo($row[0] . "<br>") ;  }                                     $retult->close();                                    }                              }while ($conn->next_result());                     }                 $conn->close();?>


分页式

代码好长啊不打了好不好啊,我写关键代码自己组合吧

$_GET['page']     //获取当前页码

例如:   http://localhost/viewPage.php?page=2        //$page-1表示上一页,+1就是下一页.  当=$PageCount就是最后一页啦

$sql = "SELECT COUNT(1)  FROM Employees"      //使用COUNT获得记录数

$results = $conn -> query($sql);           

用除法将总记录数除以页数来分页显示




到此为止,已经学完PHP基本所有语法了

至于留言板啊,公告啊,二手平台那些实验都是以上组合起来的,这里不能嵌入PHP代码就不释放啦(才不是懒

总之就是用上的来组合.只能说是基础,要深入,还得再借书学习啊



0 0
原创粉丝点击