PHP 的一些琐碎知识

一:类中用到的:

is_object ()// 检测变量是否是一个对象

                   //类似:is_bool(),is_int(),is_integer(),is_float(),is_string(),is_array();

                   //类的属性浅析:public :可以被任何代码访问,类内部或这类外部,一个属性被声明为public 则它的值可以在脚本的任何位置访问和修改

                                         private:私有属性,只允许类的内部代码对他进行访问,继承它的子类,不允许对其访问

                                         protected:保护性属性,类似于私有属性,只允许类的内部代码对其访问,但是区别在于类的继承子类都可以对其访问

                                         对属性值得误区:属性值可以使一个值,一个数组,甚至是一个对象;

                    静态属性:类的静态成员独立于基于这个类的特定对象:即 静态属性常用来表示一个与某个特定类有关而与实例对象无关的持续值,我们把静态属性看成是类的全局变量,静态属性的一个重要特性是,访问该属性不必创建一个实例,既不需要定义类的对象。举个简单的例子:如果我们给海里生物创建一个类,则他们包含一个属性:生活环境:海水。所以在构建这个类时,我们要可以把 environment 属性定义为静态属性。即只与这个类有关,而与实力无关:

class 鱼{

public static $enviroment="sea"

}

二:

异常处理:

当遇到异常的时候好的处理方法是:将其抛给异常程序处理,php 提供了一个异常处理方法(Exception)它是一种更好的触发和处理异常错误的方法,利用其函数或方法返回的不是一个错误值,而是一个对象:Exception,这个对象包含了函数的错误信息,然后把这个对象抛给(throw)调用程序进行处理和捕获!

异常处理的另一个优点是:调用程序可以不捕获某个异常,如果点用程序忽略了某个异常,则该异常会被重新抛到调用链上,知道他被捕获。

1:抛出异常:

throw new  Exception;

2:捕获异常:

try  {

    //call the function or the method

    }

catch (Exception  $e)

    {

     // HAND THE EXCEPTION

    }

// 注意:catch 结构需要一个参数,即抛出的exception 对象 本例中的 $e;

现在就可以由我们来处理这个异常:die("there is a problem");

exception 对象包含了许多方法,

getmessage(),getcode(),getfile()等.

try {//call the function or method }

catch(Exception $e)

{ echo $e->getMessage();}

你也可以在你的项目中创建自己的异常类:

class DatabaseException extends Exception{

};

 

三:接口的浅析:

interface:

子类继承其父类来实现一组统一的方法,我们已经了解,接口与抽象类类似,他们也可以声明一个类必须实现的一组方法,但借口与类的不同之处在于:

1:抽象类与其子类存在父子关系,而接口不存在这种关系,一个类通常也是实现一个接口(同时也继承其父类,似乎这些话有点难懂,换个方法说:

    一个子类只能继承其父类的方法和自身自定义的方法,不能继承多个父类,但是现在如果需要一个类要拥有多种不同的方法而这些方法又不包含在一个类中,怎么办?即实现多态继承,则需要使用接口来完成!

比如:电视与篮球是完全两个不同的类,但是他们都可以作为商品在商店中销售,那么实例化的篮球与电视 分别继承了 其祖先类 电器 球类 ,那么他们作为商品的共同方法要如何来简化?此时而已使用接口完成!

创建接口:

interface  MyinterFace{

public function addmethod(){ //code};

public function deletemethod(){ //some code};

}

//实例化接口

class myClass implements MyinterFace1,MyinterFace2 {  } // 同时实现两个接口 interface1 ,interface2;

 

今天写到这里  嘿嘿 明天继续、、、

good night

 

继续昨天的:

一:foreach ()函数:用于遍历数组:有两种用法:

 foreach (array_expression as $value)

:该方法是遍历数组的每一个值,并把每一个值赋予给$value 变量,在每次循环中,当前单元的值赋予给变量,数组的内部指针向前移一步,一边下一个循环取到下一个值。

foreach (array_expression as $key=> $value)

:该方法与上一方法相同,只是还做了一件事,就是把当前的键值 赋予给$key 变量:

define (name,value,case_insensitive)

name:常量名 value 常量值 最后一个参数设置 是否对大小写敏感 case_insensitive =true 对大小写不敏感 默认值 为false ,对大小写敏感。

 

2012-05-25

一:PHP 脚本中连接MYSQL:

  PHP 提供了2种连接到数据库的方法:

  1:mysqli :优点:同时提供过程化和面向对象的接口.

  2:PHP DATA OBJECT :PDO

     它提供了专门用来操作MYSQL的类和方法,利用这个扩展程序,我们可以连接到其他数据库:创建适用于postgreSQL oracle 等。

下面我们主要学习PDO

  (一):建立连接:

       在php中建立一个到MYsql的链接,只需要创建一个PDO 对象即可,创建PDO 对象时,需要3个参数:Dsn,用户名,口令;

   $conn= new PDO($dsn ,$username,$password);

       DSN:数据源名字 是一个字符窜:

       其为数据库类型,位置,数据库名称:

      例如:$dsn="mysql:host=localhost;dbname=mydatabase";//mydatabase 是 数据库名称

               我们可以用下面的命令连接到这个数据库:

               $dsn="mysql:host=localhost;dbname=mydatabase" (注意 如果$dsn="mysql:dbname=mydatabase"省略host 参数,则默认是:                                     localhost) 

     $username="root";

      $password="mypassword";

    $conn=new PDO ($dsn ,$username,$password);//如此即可连接到数据库

            为了关闭这个数据库连接,只需将:

    $conn=null;即可撤销PDO对象,从而撤销这个连接。

    错误处理:为了是数据库在每次错误时都要求PDO激发一个异常,我们需要使用PDO::SetAttribute( PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

          如此就可以在try.....catch 中捕获异常:

          try {

      $conn=new PDO($dsn,$uesrname,$password );

      $conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

      }

      catch (Exception $e ){

      echo "Connection failed:".$e->getMessgae();

      }

   (二):数据查询

          数据查询需要使用PDO中的query 方法:

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

   该语句返回的结果值是另一种类型的对象,结果集中的每一个记录都是一个关联数组,保存了表中的字段名和相应的数组,我们用foreach访问结果

     $sql="select * from fruit";

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

    foreach ($rows as $ row){

      echo "name=".$row["name"]."<br />";

      echo "color=".$row["color"]."<br />";

    }

 (三)PHP 数据库

面向过程连接数据库:

1:$conn=mysql_connect("localhost","username","password") 函数进行数据库连接;

2:mysql_select_db(''databaseName",$conn) 进行数据库选择;

3:定义sql 语句变量:$sql="sql语句";

4:利用查询函数查询:mysql_query($sql,$conn);

5:使用查询结果 $result=mysql_query($sql,$conn),

首先先学习两个函数:

    A:mysql_fetch_row() 该函数从mysql 返回结果集取得一行数据并作为数组(数值数组,即键值为0,1,2,、、、)返回,依次调用         $rows=mysql_fetch_row() 将返回结果集中的下一行,如果没有更多行则返回 FALSE。所以可以据此做循环输出

    while(mysql_fetch_rows(data)){

      echo $rows[1];

    }

B:mysql_fetch_array()该函数与mysql_fetch_row() 类似。从查询结果集中取得一行作为作为数组返回,但在返回数组时与mysql_fetch_row()不同之处在于它返回一个数值数组或者关联数组,或者都返回,

mysql_fetch_array(data,array_type)

参数描述
data 可选。规定规定要使用的数据指针。该数据指针是 mysql_query() 函数产生的结果。
array_type

可选。规定返回哪种结果。可能的值:

  • MYSQL_ASSOC - 关联数组
  • MYSQL_NUM - 数字数组
  • MYSQL_BOTH - 默认。同时产生关联和数字数组

简单的理解为mysql_fetch_array(data)返回的数组,你可以使用$row[1]或者$row["字段名"];一次调用mysql_fetch_array(data)将依次返回下一行,如果没有更多行则返回false;

mysql_insert_id传回最后一次使用Insert 指令的ID;

mysql_tablename 取得数据库名字

mysql_error 返回数据库错误

mysql_close; 关闭数据库;

 

 2012-05-26

  一:php 中的时间处理程序:

1:首先要了解时间戳概念:什么是时间戳?

     时间戳是一个整数,表示自1970年1月1日午夜至今间隔时间的秒数,重点记住:时间戳是一个指定时间与1970年1月1日午夜的时间间隔的秒数。为一个整数。

   (此外你需要了解一下GMT 与 UTC  :因为你可能初次看到这连个概念就晕掉了,呵呵,其实你只需要简单的了解 一些即可:

        GMT就是格林尼治标准时间,它是Greenwich mean time的简称。
        UTC则是协调世界时间,它是coordinated universal time的时间。它是一种更精确的GMT。 
     事实上UTC 就是比GMT 更就精确就OK!

  )

2:获取当前时间和日期:

    time() 函数可以读取web服务器或PC机内置的时钟(即当前时间),返回一个时间戳:

    eg(例如):echo time();

3:创建自己的时间戳:

    常用的函数为:mktime(),gmmktime(),strtotime();

    (1):mktime();可以根据多达6个时间日期参数(时分秒月日年)返回一个时间戳,

         eg:echo mktime(14,32,34,5,26,2012);

              该语句返回2012-05-26 14:32:34 的时间戳。

      如果mktime();省略参数设置,则与time()一样返回当前时间的时间戳;

   (2):从GMT时间日值生成时间戳:

    mktime()会假定传给他的参数是计算机当前的时区时间和日期-----他会把这个传入的时区的时间转换成UTC时间从而返回一个时间戳(即mktime()函数先把传输的参数转换为0时区的值在输出相应的时间戳)

       要想根据GMT日期和时间生成一个时间戳,需要用到gmmktime()函数;

        事实上 我在我的电脑中做实例:

        echo mktime();

        echo gmmktime();

         输出的值为一样

        换个例子:

    echo mktime(0,0,0,1,2,2010);

    echo gmmktime(0,0,0,1,2,2010);

          返回的还是一样的值,所以,请你在使用此函数是自己测试一下,我现在也搞不清 了,所以又对这两个更清晰的朋友指点一下,.

      (3)从时间和日期字符窜生成时间戳:

    strtotime()函数,可以将时间字符窜返回为时间戳,对于其参数可以是一个包含美国英语日期格式的字符串并尝试将其解析为 Unix 时间戳

 例如:<?php

  echo(strtotime("now"));
  echo(strtotime("3 October 2005"));
  echo(strtotime("+5 hours"));
  echo(strtotime("+1 week"));
  echo(strtotime("+1 week 3 days 7 hours 5 seconds"));
  echo(strtotime("next Monday"));
  echo(strtotime("last Sunday"));
  ?>

  4:*重点 从时间戳中读取日期和时间值

      我们可以得到时间戳,但是我们有时候更需要把时间戳转换为相应的日期时间格式。

  getdate()函数接受一个时间戳作为参数,然后返回一个关联数组,保存了时间日期的各个值。 

     数组的键值:seconds,minutes,hours,mday(一个月的某一天1~31),wday(一周的某一天0~6),mon(月)year,yday(一年中的某一天)weekday(一星期的某一天)month 1-12月

      可以自己做测试;

eg: $timestamp=strtotime("15th Feb 2006 3:12 pm")

      $d=$getdate($timestamp);

      echo $d[mday].$d[mon].$d[year];(输出月日年);

    另外一个函数 idate($p1,$p2);他需要两个参数,一个格式窜,一个时间戳;

   $timestamp=strtotime("15th Feb 2006 3:12 pm")

       echo idate("Y",$timestamp);输出年。

5:格式化日期字符串:

    php内置的date()函数可以一个时间戳转换为一个日期字符窜,它的用法与idate()一样,需两个参数,格式串和时间戳;

  我们在求一个时间串的时间戳时,为了防止输入错误的数据,可以先在把参数传给mktime()等函数前先做检查,

checkdate()函数是php 内置的检测函数,如果是有效的日期则返回true 否则返回false;

 

 2012-05-30

一:今天学习一下PHP中引用的概念:

   通过参数把数据传递给一个函数或者利用return 语句把函数中的数据返回给调用代码,在这两种情况下都是把信息的附件复制给函数活着把函数中数据的附件返回给代码,我们称其为按值传递或者按值返回,

很多时候这种按值传递按值返回不会带来什么问题,但是我们需要直接对原来的数据进行处理,此时就需要对原来数据操作而非复件、

看下面的例子:

  function resetCounter($c){

  $c=0;

  }

  $counter=0;

  $counter++;

  $counter++;

$counter++;

echo "$counter<br />";

resetCounter($counter);

echo "$counter<br />";

运行你会发现,两次输出都为:3,为什么resetCounter ()函数并未起作用呢?因为resetCounter()将$counter 的复件传递给函数并置零,所以原来数据并未改变;

要想让resetCounter 函数达到重置的目的,php 提供了引用,

看一下如何使用引用:

  $myVar=123;

  $myRef=& $myVar;

  $myRef++;

  echo $myVar; //display:124

  echo $myRef;//display:124

& 符号来建立引用:

将引用传递给函数

 function resetCounter( & $c){

  $c=0;

  }

  $counter=0;

  $counter++;

  $counter++;

$counter++;

echo "$counter<br />";// 3

resetCounter($counter);

echo "$counter<br />"; //0

从自定义函数中返回引用:

 $myNumber=5;

function & getMyNumber(){

global $myNumber;

return $myNumber;

}

$numberRef=& getMyNumber();

$numberRef++;

echo $numberRef;//6

echo $myNumber;//6

 2012-06-01

 

一:JS的表单验证:

PHP 分页:

 <?php
            $pagesize=5;                                           //设置每页显示信息条数(用于mysql查询之用)
            $url=$_SERVER["REQUEST_URI"];             // 取得当前的url
            $url=parse_url($url);                     // 把url 拆解成数组
            $url=$url['path'];
            $numq=mysql_query("select * from message");                   //查询数据
            $num=mysql_num_rows($numq);  
            //取得数据条数

            //用来统计需要多少页显示全部信息 并如何显示 (第一页不会显示 上一页  最后一页不会显示 下一页)
            if (($num%$pagesize)!=0)                
            {$p_total=ceil($num/$pagesize) ;}
            else {$p_total=$num/$pagesize ; }
             
            if($_GET['page'])
            {
                $pageval=$_GET['page'];
                $page=($pageval-1)*$pagesize;
                $page.=',';
            }
            if ($num > $pagesize){
                if ($pageval<=0)
               $pageval=1 ;
                if($pageval==1){
                  echo "Total:$num "."<a href=$url?page=".($pageval+1).">下一页</a>";}
                else if ($pageval==$p_total){
                    echo "Total:$num "."<a href=$url?page=".($pageval-1).">上一页</a> ";
                } 
                else {echo "Total:$num "."<a href=$url?page=".($pageval-1).">上一页</a> <a href=$url?page=".($pageval+1).">下一页</a>" ;}
            }
           
            $sql="select * from message order by id desc limit $page $pagesize";
            $query=mysql_query($sql);
            while($rows=mysql_fetch_array($query)){
            ?>
           
  <tr bgcolor="#eff3ff">
  <td>标题:<?php echo $rows['title']?> 用户:<?php echo $rows['user']?></td>
  </tr>
  <tr bgColor="#ffffff">
  <td>内容:<br /><?php echo rpstr( $rows['content'])?></td>
  </tr>
 
  <?php } ?>

 

学习几个 url 处理函数:查询字符窜保存页面状态

1:parse_url  解析URL 返回其组成部分

对严重不合格的 URL,parse_url() 可能会返回 FALSE 并发出 E_WARNING。否则会返回一个关联数组,其组成部分为(至少有一个):

  • scheme - 如 http
  • host
  • port
  • user
  • pass
  • path
  • query - 在问号 ? 之后
  • fragment - 在散列符号 # 之后

Example #1 parse_url() 例子

<?php
$url 
'http://username:password@hostname/path?arg=value#anchor';

print_r(parse_url($url));
?>

以上例程会输出:

 

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

2:http_build_query()

     生成 URL-encode 之后的请求字符串  (即查询字符窜);

    <?php
$data 
= array('foo'=>'bar',
              
'baz'=>'boom',
              
'cow'=>'milk',
              
'php'=>'hypertext processor');
              
echo 
http_build_query($data); // foo=bar&baz=boom&cow=milk&php=hypertext+processor
?>

3:htmlspecialchars();

他可以把special characters to HTML entities

例如 :& 转化成&amp;

用查询字符窜保存页面状态实例:

  $fields=array(

       "firstname"=>"lewis",

       "homepage"=>"http://www.example.com",

       "favoritesport"=>"ICE Hockey"

       );

echo "<p><a href="."moreinfo.php"."htmlspecialchars(http_build_query($fields))".">Find more info on this person</a></p>"

此时输出可查询字符窜;

接下来我们可以在 moreinfo.php 中访问这些查询字符窜中的数据;

<?php

$firstname=$_GET["firstname"];

$homepage=$_GET["homepage"];

$favoritesport=trim($_GET["favoritesport"]);

?>

 利用查询字符窜保存数据可以实现分页:

 

 

  使用JS在对表单为发送给服务器前进行验证,自定义函数:

     例如:

 

//进行密码和ID的验证 ,密码不能少于5个字,id 不能为空。

<script type="text/javascript">
            function Checklogin(){
                if (login.id.value==""){
                    alert("ID不能为空");
                    login.id.focus();
                    return false;
                }
                if (login.psw.value.length<5)
                   { alert("密码不能少于5个字符")
                   login.paw.focus();
                   return false;
           }
             }
    </script>

 函数定义好了,怎么进行验证,怎么使用呢?可以再<form>标签里添加onsubmit 属性,

 <form action= ""  name=""  method="post" onsubmit="return  Checklogin()">

还有另一种方法:<script type="text/javascript">

window.document.input[2].onclick=Checklogin;

</script>

 

posted on 2012-05-24 01:40  Lewis Yu  阅读(1056)  评论(0)    收藏  举报