PHP学习笔记

1.PHP环境的搭配

安装WampServer 5

开发工具:easyeclipse(推荐)

书写和调用:<? . . . ?>  <?php . . . ?> 

注释:

// ……….     

/*…………*/ 
#..............
 
2.PHP的数据类型源码调试
数据运算类型
boolean(布尔型)理解为真假型  
integer(整型)
float(浮点型,也作“double”)理解为小数型
string(字符串)
两种复合类型
array(数组)
object(对象)
 
3.PHP运算类型
1算术运算:理解为数学运算
如:5 * 6 - 12
2*(28+1)(算术运算遵循数学运算规则,从左到右,先算乘除后算加减,遇到括号先算括号内)
2赋值运算:把一个值写入一个变量.
如:
$a=1;
$a+=2;
$a*=3;

3.比较运算:用来确定两个数之间的关系.

1==2
3!=2
5<3
"ok"=="ok"
1==='1'

4.逻辑运算:先将比较的两边转换成布尔类型,再执行他们的关系.

1 && 1
0 && 1
1 || 1
1 || 0

5.递增递减运算:只操作变量的一种运算.

$a++
++$a
$a--
--$a

 

4.PHP条件语句

1、if 条件语句
if(expr) {
    echo TRUE
}else{
    echo FALSE
}
if(expr) {
    echo TRUE
}
elseif(expr) {
    echo CON
}else{
    echo FALSE
}

2.switch 条件语句

switch ($i) {
    case 0:
        echo "输出 0";
        break;
    case 1:
        echo "输出 1";
        break;
    case 2:
        echo "输出 2";
        break;
}

 

5.PHP循环语句

1、break n 循环控制语句
break 跳出一层循环
break n跳出N条循环
 
2、do…while 循环语句
先执行一次循环再判断条件
do{
……
}
while(expr)
先判断条件执再行一次循环
while(expr){
……
}
3、for 循环语句
for ($i = 1; $i <= 10; $i++) {
    echo $i;
}
 
6.PHP数组
数组
$arr = array (3,5,7,9,6);

$arr = array ("id"=>2,"title"=>3);
数组的函数
使用count 函数统计数组条数 count ( $arr );

使用is_array函数判断数组 is_array ( $arr );
另一种创建数组的函数explode 
explode( "key" , value);
foreach 遍历数组
foreach ( $arr as $key => $value  ){
       ……
 }

 

7.PHP函数

 函数的命名跟自定义变量一样,只能使用 _, A~Z, a~z
Function func_name($val){
……
}

使用 unset($var)删除一个变量

使用return 函数返回函数内部值 

function_exists() 判断函数是否存在

 

8.Mysql 简介和创建

 MYSQL默认使用的是3306端口
使用工具MYSQL官方的工具访问:MySQL Administrator tool 

数据库中常用字段类型:

整数型:TINYINT,SMALLINT,INT,BIGINT

小数型:FLOAT,DOUBLE,DECIMAL(M,D)

字符型:CHAR,VARCHAR

日期型:DATETIME ,DATE,TIMESTAMP

备注型:TINYTEXT ,TEXT ,LONGTEXT

 

创建一个数据库命令:CREATE TABLE

删除一个数据库命令:DROP TABLE

修改一个字段名称:RENAME TABLE `原字段` TO `新字段` 

删除一个字段:       ALTER TABLE `表`  DROP `原字段`

插入一个字段:       ALTER TABLE `表`  ADD `新字段` …  AFTER `原字段`

例如:

CREATE TABLE `test` (
  `id`     int(10)  NOT NULL auto_increment,
  `uid`     varchar(10) NOT NULL  default '0',
  `regdate`  date NOT NULL,
  `remark`    text  NULL,
   PRIMARY KEY  (`id`)
)

 

9.数据库中的常用SQL语句

SELECT  查询字段 FROM 表名 WHERE 条件 

查询字段:可以使用通配符* 、字段名、字段别名

表名: 数据库.表名 ,表名

常用条件: = 等于 、<>不等于、in 包含 、 not in 不包含、 like 匹配

       BETWEEN  在范围  、 not BETWEEN  不在范围  < 、>

条件运算: and 、 or 、 ( )

分组语句:group by 字段

排序语句:order by 字段,字段 ASC / DESC

指针查询:limit 初始值,结束值

计算:

  COUNT(*) 统计函数

  MAX(*) 最大值函数

  MIN (*) 最小值函数

  AVG(*) 平均值函数

  SUM(*) 累计值函数(∑)

 Insert 插入语句
 
insert into 表名 (字段…,…) values(值…,…)
insert into 表名 values(值…,…)

插入时须考虑清楚字段类型避免插入后出现缺值,乱码现象

Update 更新语句 

UPDATE 表名 SET 字段 =WHERE 条件 limit  

Delete  删除语句

DELETE  FROM 表名 WHERE 条件 limit  

 

10.MYSQL在PHP5中的应用

php.ini 加载mysql组件:

 extension=php_mysql.dll  前的; 去掉

 extension_dir = " "  路径是否正确

PHP链接mysql函数

mysql_connect("主机", "用户名", "密码")
mysql_select_db("打开数据库",连接标识符);

执行一个SQL语句

mysql_query (SQL语句 ,连接标识符);

成功后返回一个结果标识符,失败时返回false。

两种查询函数array / row区别:

mysql_fetch_row(result);

mysql_fetch_row用来查询结果的一行保存至数组,该数组下标从0开始,每一个数组元素对应

一个域。通过循环,可以将查询结果全部获得。

mysql_fetch_array(result);

mysql_fetch_array和mysql_fetch_row功能基本相同,只不过它除了可以用从0开始的偏移量作

索引,还可以用域名作索引。

mysql_query("set names 'GBK'"); 解决中文乱码

其他常用Mysql函数介绍

mysql_num_rows  用于计算查询结果中所得行的数目

mysql_insert_id 传回最后一次使用 INSERT 指令的 ID。

mysql_tablename 取得数据库名称

mysql_error   返回错误信息

mysql_close 关闭 MySQL 链接

 

11PHP+MYSQL留言板

PHP里的页面相互调用

require()  与  require_once()-同一个文件只读取一次

通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require

所指定引入的文件,如果出现错误是致命的。

include()  与  include_once()-同一个文件只读取一次

可以放在 PHP 程序的任何一个位置,PHP 程序在执行到时,才会先读入

include 所指定引入的文件,如果出现错误将会提示。

require('con.php') ;
include('con.php') ;

 

12.PHP+MYSQL留言板2

调用表单验证

<form action="" method="post" name="myform" onsubmit="return CheckPost();">
<SCRIPT language=javascript>
function CheckPost()
{
    if (myform.user.value=="")
    {
        alert("请填写用户");
        myform.user.focus();//焦点的位置
        return false;//返回值
    }
    if (myform.title.value.length<5)
    {
        alert("标题不能少于5个字符");
        myform.title.focus();
……

str_replace( 被替换的值,替换的值,被替换的内容)

function htmtocode($content) {
   $content = str_replace("\n", "<br>", str_replace(" ", "&nbsp;", $content));
   return $content;
}

htmlspecialchars 格式化html

主要功能是将HTML格式化,防止在输出html时被浏览器执行

htmlspecialchars(所要格式化对象,定义单双引号,编码)

md5加密函数

md5( 加密对象 )

COOKIE 的使用和登陆

setcookie("TEST", "value", 3600, "/dir", ".domains.com", true);
      cookie名 值   保存时间 路径   起效域名    http发送   

使用PHP cookie 当场不能生效,需要刷新一次

 

13.PHP+MYSQL分页原理

SELECT * FROM table …… limit   开始位置 , 操作条数

SELECT * FROM table …… limit   020//取最前面20条

SELECT * FROM table …… limit   1020//取从第11条开始的20条

公式

当前页数 - 1 )X 每页条数 , 每页条数
Select * from table limit ($Page- 1) * $PageSize, $PageSize 

parse_url()解析URL函数

parse_url() 是讲URL解析成有固定键值的数组的函数

$ua=parse_url("http://username:password@hostname/path?arg=value#anchor");
print_r($ua);
结果:

Array
(
    [scheme] => http
    [host] => hostname
    [user] => username
    [pass] => password
    [path] => /path
    [query] => arg=value
    [fragment] => anchor
)

14.PHP上传原理

只有使用了multipart/form-data,才能完整的传递文件数据

<form enctype="multipart/form-data" method="post" name="upform">
<input name="upfile" type="file">

move_uploaded_file函数

上传后移动文件到目标位置的函数

move_uploaded_file(临时文件,目标位置和文件名);

is_uploaded_file 函数

判断上传MIME类型的文件函数

move_uploaded_file(MIME);

15.PHP生成HTML文件原理

  fopen 打开文件函数 

fopen (路径和文件名,打开方式);
打开方式:R-只读 W-写入 A-读写

 fread 读取文件内容

fread (打开的文件,结束位置)
结束位置:字节为单位

filesize 读取文件大小,字节为计量单位 

filesize (路径和文件名);

fwrite 写入文件内容 

fwrite (路径和文件名,写入的内容);

fclose 关闭打开的文件 

fclose (路径和文件名);

unlink() 删除文件函数  

unlink(路径和文件名)

rmdir() 删除目录函数 

rmdir(路径和目录名)

 

16.PHP小偷程序原理

初识正则表达式

^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+

用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割

、匹配、查找及替换操作。

(.*)
.匹配除换行符
*匹配1个或多个任意字符
( ) 开始和结束位置 

ereg(正则表达式, 内容, 返回的数组); 

若省略参数返回的数组,找到则返回值为 True 否则 返回 False

ereg() 有区分大小写,eregi() 无区分大小写。

file_get_contents 读取整个文件函数

$rf = fopen ('doc.txt',r );
file_get_contents($rf); 
等价于
$rf = fopen ('doc.txt',r );
fread ($rffilesize ('doc.txt'));

17.PHP面向对象

创建一个类:
class 类名 {
……
}
 例
class MyPc{
public $name;//成员
var $price;//成员
 function vod() {//方法
 return "PHP100视频教程";
   }
}
 
new函数对象实例化
class MyPc{
public $name;
var $price; 
 function vod() {
  return "PHP100视频教程";
   }
}

$pc1 = new MyPc();
$pc1->name;//访问类成员

18.创建一个和多个对象
$pc1 = new MyPc();
 
$pc2 = new MyPc();
 
$pc3 = new MyPc();
 
对象中的$this关键字
$this关键字是用来访问当前对象中的对象属性和对象方法的系统变量
 
class MyPc{
   public $name;
   public $price; 

    function vod() {
         $this->name;
           }
    ……
     $this->vod() ;
    ……
}
$this仅能在当前对象中使用
   
 
初始化对象  __construct()
原PHP4中我们需要建立一个
与类名称相同的一个对象方法:
class MyPc{

   function MyPC ( ) {

        初始化操作
         
       }
}
在PHP5中继承了PHP4但为了更
好的针对面向对象开发有了固定函数:
class MyPc{

   function __construct() {

        初始化操作
         
       }
}
 
析构函数 __destruct()
我们可以理解为垃圾回收机制
 
当对象内部的操作执行完毕的时候,
__destruct()被调用,
然后对象所使用的内存被释放出来。
规则:后进先出
class MyPc {
  ……

    function __destruct() {
        ……
      }
}

19.类的封装

封装关键字:
public 表示全局,类内部外部子类都可以访问;
protected表示受保护的,只有本类或子类或父类中可以访问;
private表示私有的,只有本类内部可以使用;
 
 
class MyPc{
   public $name;
   protected $price; 

   private function vod() {
         $this->name;
           }
    ……
}

 

某些特定操作的时候需要访问和赋值封装的类型,这个时候我们就需要其他的
函数帮我们完成这些操作,PHP为我们提供了个方法名:__set() , __get()
 
__set() 取得当前类中封装过私有属性或者方法重新执行或赋值操作
 
__set($Name,$Value)
__get() 取得当前类中封装过属性或方法并转换成共有属性
 
__get()
 
20.类的继承
继承关键字:extends
PHP类的继承,我们可以理解成共享被继承类的内容。PHP中使用extends单一继
承的方法,请切忌!(非C++多继承)被继承的类我们叫做父类(基类)继承者成为
子类(派生类)
 
class MyPc{
……
……

class home extends MyPc{
……
……

 

 
基类方法重载和父类方法访问
方法重载我们也可以理解方法覆盖,在派生类里使用与基类方法
重名的方法名称执行重载
 
重载时我们需要调用原始基类内容,再增加新内容,我们可以使用 
基类名::方法名称
 
21.类的抽象
关键字:abstract
一个类中至少有一个方法是抽象的,我们称之为抽象类。
所以如果定义抽象类首先定义抽象方法。
abstract class class1{

   abstract function fun1();
……
}

注意:

1、类中至少有一个抽象方法
2、抽象方法不允许有{ }
3、抽象方法前面必须要加abstract
 
 
抽象类的几个特点:
 
     1、不能被实例化,只能被继承
     2、继承的派生类当中要把所以抽象方法重载才能实例化
 
 
class cl2 extends cl1{

   function fun1(){ 
   }
……
}

22。类的常用关键字

final
用来定义类和方法的一个重要关键字,当定义类的时候该类将不能被继承,
当用来定义方法的时候该方法将不能被重载(也叫锁)
final class class1{

……

   final function fun1(){
    ……
   }
……
}
self
用来用类访问当前类中的内容的关键字,类似与$this关键字,但$this是需要
类实例化以后才可以使用,self 可以直接访问当前类中的内部成员(不用实例化)
self :: 类内部成员(属性或者方法)
等价于
类名 :: 类内部成员(属性或者方法)
 
因为没有实例化类访问内部属性或者方法是没有意义的,
所以self一般用来访问类中的:静态成员,常量,或者其他定义内容
  
static
用来定义类的静态属性或方法,可以在类未被实例化时使用,静态属性单独占
用内存而不会因创建多个对象时而导致同样的方法或者属性重复占用。
 
class class1{

   static $name;
   static function fun1(){
    ……
   }}
类名称 : : 静态成员    
self  : : 静态成员
 注意 
静态方法内部禁止出现非静态内容
 
const
用来定义类中的常量,类似PHP外部定义常量的关键字define();  Const只能
修饰类当中的成员属性!
class class1{

   const NAME;
    
   function fun1(){
    ……
   }}
1、建议大写常量
2、常量不使用$符号
 
23.接口的创建和引用
关键字
创建interface
interface demo {

    const  NAME="名字";//对象属性必须为常量

    function Fun1();//方法必须为抽象方法
    function Fun2();

}
引用implements
普通类引用接口例子:

  class mypc implements demo , demo2 , demo3{
       ……
    }
抽象类引用接口例子:

   abstract class mypc implements demo , demo2 , demo3{
      ……
    }
继承父类引用接口并存例子:

  class mypc extends root implements demo , demo2 , demo3{
       ……
    }
接口与接口继承:

   interface demo3 extends demo{
      ……
    }

24.类的多态

多态是具有表现多种形态的能力的特征,在OO中是指“语言具有根据对象的类型以不同方式处理。

 运算符 :instanceof
 用来测定一个给定的对象是否来自指定的对象类
class A { }
class B { }

$thing = new A;

if ($thing instanceof A) {
    echo 'A';
}
if ($thing instanceof B) {
    echo 'B';
}

多态应用实例

interface myusb{
     function type();
     function alert();
 }

 class zip implements myusb{
     function type(){
         echo '2.0';
     }
     function alert(){
         echo '正在检查....U盘驱动';
     }
 }

 class mp3 implements myusb{
     function type(){
         echo '1.0';
     }
     function alert(){
         echo '正在检查....MP3驱动';
     }
 }

 class mypc{
    function pcusb($what){
        $what->type()."<br>";
         $what->alert();
    }
}

 $p=new mypc();
 $zip=new zip();
 $mp3=new mp3();

$p->pcusb($mp3);

 25.面向对象总结

对象描述的配置

方法名 __tostring()

我们可以直接打印对象句柄,从而获得该方法的基本信息或其他内容

class My{

function __tostring ( ){

  echo "我所要显示的内容";
  
   } 
}

$p = new My();

echo $p;

输出结果:我所要显示的内容

对象方法的异常处理

方法名 __call($funname,$arr_value)

调用一些不存在的对象方法的异常处理,使程序继续正常运行。

class My{

function __call($n,$v){

  echo "错误的方法名".$n;

  echo "错误的参数".Print_r($v);//因为参数会有多个所要用数组的方式保存,打印的时候也要用print_r 输出

   } 
}

克隆对象的应用

方法名 __clone() 

关键字  clone

通过克隆的方式我们可以在内存中生成两个一样的对象或升级原对象。

class My{

function __clone( ){

  echo "克隆时自动调用的函数";
  
   } 
}

$a=new My()

$b= clone $a; 

自动载入对象的方法

方法名 __autoload()

快速取得对象名称并自动载入进当前页面

function __autoload($class_n){//该方法是在类以外单独的方法
也就是我们所谓的构造函数


  include($class_n.".php");//将会被自动调用,执行如下include("mypc.php");include("demo.php");
  
   } 

  $p=new Mypc();
  $d=new demo();

26.实例制作PHP+MYSQL的类

实例

class mysql{
     private $host;   //数据库为账号密码等为保密信息,选用私有类型
     private $name;
     private $pass;
     private $table;

    function __construct($host,$name,$pass,$table,$ut){//初始化
    $this->host=$host;
    $this->name=$name;
    $this->pass=$pass;
    $this->table=$table;
    $this->ut=$ut;
    $this->connect();
}
     function connect(){//连接数据库
         $link=mysql_connect($this->host,$this->name,$this->pass) or die ($this->error());
         mysql_select_db($this->table,$link) or die("没有数据库".$this->table);
         mysql_query("SET NAMES '$this->ut'");//设置中文编码
     }
     function query($sql, $type = '') {//数据库出错类的封装
        if(!($query = mysql_query($sql))) $this->show('Say:', $sql);
        return $query;
    }
     function error(){//数据库出错类的封装
         return mysql_error();
     }
     //######封装方法功能类
     function fn_insert($table,$name,$value){//插入数据方法的封装
         $this->query("insert into $table($name)value($value)");
     }
 }
 $db=new mysql('localhost','root','','bbs','GBK');
 $db->fn_insert('message','id,user,title,content,lastdate',"'','王五','我插入的标题','我插入的信息',now()") 

27模板引擎Smarty入门

 Smarty是一个使用PHP写出来的PHP模板引擎,目的是要使用PHP程序同美工分离,使的程序员改变程序的逻辑内容时不会影响到美工的页面设计,美工重新修改页面时不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要。
官方下载:http://www.smarty.net/download
 
Smarty的配置
include_once("Smarty/Smarty.class.php"); //包含smarty类文件

$smarty = new Smarty(); //建立smarty实例对象$smarty

$smarty->config_dir="Smarty/Config_File.class.php";  // 目录变量

$smarty->caching=false; //是否使用缓存,项目在调试期间,不建议启用缓存

$smarty->template_dir = "./templates"; //设置模板目录

$smarty->compile_dir = "./templates_c"; //设置编译目录

$smarty->cache_dir = "./smarty_cache"; //缓存文件夹

//----------------------------------------------------

//左右边界符,默认为{},但实际应用当中容易与JavaScript相冲突

//----------------------------------------------------

$smarty->left_delimiter = "{";

$smarty->right_delimiter = "}";

Smarty的应用:变量

$smarty->assign("模板变量", "值(数组/变量)");
$smarty->display("模板名称");  

$smarty->assign("name", "标题"); //进行模板变量替换
$smarty->display("index.htm");  // 该文件就是模板文件,应该在模板目录下

html

<html>
<title>{$name}</title>
……

循环

数组是最常用的方式,可以帮助我们循环列表,和快速访问打理数据,

如果要循环数组我们可以使用Smarty内置的方法section

$smarty->assign("模板变量", "数组");

{section name=s loop=$stu}

{$stu[s].name}

{sectionelse} 

无内容

{/section}

实例

PHP:

include("smarty_inc.php");
//变量
$title="标题";
//数组
$name[]=array("name"=>"第一条新闻","date"=>"2013.4.1");
$name[]=array("name"=>"第二条新闻","date"=>"2013.4.1");
$name[]=array("name"=>"第三条新闻","date"=>"2013.4.1");
$name[]=array("name"=>"第四条新闻","date"=>"2013.4.1");

$row=array("标题","时间");

$smarty->assign("title",$title);
$smarty->assign("name",$name);
$smarty->assign("row",$row);
$smarty->display("index.htm");

html

<b>{$title}</b><br>
{$row[0]} | {$row[1]}
<hr>
{section name=list loop=$name}
<b>{$name[list].name}-{$name[list].date}</b><br>
{/section}

28模板引擎Smarty的变量操作符

php模板引擎smarty内置的一些操作函数,我们称之为变量操作符,变量操作符

可用于操作变量,自定义函数和字符。(跟我PHP中常用的PHP内部函数类似)

语法中使用"|"应用变量操作符,多个参数用":" 分隔开来

原始内容:{$title}
<hr>
capitalize[首字母大写]<br>
{$title|capitalize}<br>

count_characters [计算字符数]<br>
{$title|count_characters}<br>

cat [连接字符串]<br>
{$title|cat:"连接内容"}<br>

count_paragraphs [计算段落数]<br>
{$title|count_paragraphs}<br>

count_sentences [计算句数]<br>
{$title|count_sentences}<br>

count_words [计算词数]<br>
{$title|count_words}<br>

date_format[时间格式]<br>
{$title|date_format:"%y-%m-%d"}<br>
{$smarty.now|date_format:"%y-%m-%d"}<br>

default [默认]<br>
{$title1|default:"没有内容"}<br>

escape [转码]<br>
{$title|escape:"html"}<br>
{$title|escape:"url"}<br>

indent[缩进]<br>
{$title|indent:10:"&nbsp;"}<br>
{$title|indent:10:"..."}<br>

lower[小写 ]<br>
{$title|lower}<br>

upper[大写]<br>
{$title|upper}<br>

nl2br[换行符替换成]<br />
{$title|nl2br}<br>

replace[替换]<br />
{$title|replace:"is":"**"}<br>

spacify[插空]<br />
{$title|spacify:" "}<br>

string_format[字符串格式化]<br />
{$title|string_format:"%.2f"}<br><!四舍五入>
{$title|string_format:"%d"}<br><!整数>

strip[去除(多余空格)]<br />
{$title|strip:""}<br>

strip_tags[去除html标签]<br />
{$title|strip_tags}<br>

truncate[截取]<br />
{$title|truncate:20:"..."}<br>

wordwrap[行宽约束]<br />
{$title|wordwrap:10:'<br>'}<br>

29.模板引擎Smarty内置函数

foreach 数组的处理

=======无键值数组
{foreach from=$name item=id}
id: {$id}<br>
{/foreach}

=======有键值数组
{foreach key=j item=v from=$name }
{$j}: {$v}<br>
{/foreach}

include 多功能使用

{include file="header.htm"}
{include file="D:\www\head.htm"}
{include file='head.htm' title="Main Menu"}

IF条件语句的使用

{if $name=='ok'}

{else}

{/if}

literal和 strip 文本的处理技巧

literal 数据将被当作文本处理,此时模板将忽略其内部的所有字符信息. 该特性用于显示有可能包含大括号等字符信息的 javascript 脚本

{literal}
 <script language=javascript>.....
 </script>
{/literal}

 strip标记中数据的首尾空格和回车. 这样可以保证模板容易理解且不用担心多余的空格导致问题.

{strip}
....

{/strip}

30模板引擎Smarty缓存应用

Smarty缓存的配置

在配置文件里写入(smarty_inc.php)

$smarty->cache_dir = "/caches/";  //缓存目录

$smarty->caching = true;  //开启缓存,为flase的时侯缓存无效

$smarty->cache_lifetime = 60;  //缓存时间

Smarty缓存的使用和清除

$smarty->display('cache.tpl', cache_id);  //创建带ID的缓存

$smarty->clear_all_cache(); //清除所有缓存
$smarty->clear_cache('index.htm'); //清除index.tpl的缓存
$smarty->clear_cache('index.htm',cache_id); //清除指定id的缓存
 Smarty局部缓存
<div>{insert name="get_time"}</div>
function insert_get_time(){
      return date("Y-m-d H:m:s");
}

smarty_block 局部缓存

{blockname}
没有缓存的:{$smarty.now}
{/blockname}

MYSQL与Smarty的应用

 

 待续....

posted on 2013-03-24 23:41  wind side  阅读(993)  评论(0编辑  收藏  举报

导航