PHP/Javascript/CSS/jQuery常用知识大全详细整理第2/2页

 更新时间:2013年01月07日 10:27:04   作者:  
PHP/Javascript/CSS/jQuery常用知识大全详细整理(原创)感兴趣的朋友可以参考下


            
101.常见框架
       thinkPHP  yii  ZendFramework  CakePhp  sy

102. 常用魔术方法的触发时机?
       1)__autoload() :当程序实例化某个类,而该类没有在当前文件中被引入。此时会触发执行__autoload()。程序希望通过该方法,自动引入这个类文件。该方法有一个参数,即就是那个忘记引入的类的名称。__autoload()方法的工作原理是什么?当程序执行到实例化某个类的时候,如果在实例化前没有引入这个类文件,那么就自动执行__autoload()函数。这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下确实存在这个类文件后,就执行include或者require来载入该类,然后程序继续执行,如果这个路径下不存在该文件时就提示错误。使用自动载入的魔术函数可以不必要写很多个include或者require函数。
       2)__construct()  :这个是魔术构造方法。构造方法是实例化对象的时候自动执行的方法,作用就是初始化对象。该方法可以没有参数,也可以有多个参数。如果有参数,那么new这个对象的时候要记得写上相应的参数。在php5以前,没有魔术构造方法,普通构造方法是一个跟类名同名的方法来实现构造的。如果一个类中既写了魔术构造方法,又定义了普通构造方法。那么php5以上版本中,魔术方法起作用,普通构造方法不起作用。反之,在php5以前版本中,不认识魔术构造方法,只是把该方法当做普通的方法。
       3)__destruct()  :这个是魔术析构方法。析构方法的作用和构造方法正好相反,是对象被销毁时被自动调用的,作用是释放内存。析构方法没有参数。
       4)__call() :当程序调用一个不存在或不可见的成员方法时,自动触发执行__call()。它有两个参数,分别是未访问到的方法名称和方法的参数。而第二个参数是数组类型。
       5)__get() :当程序调用一个未定义或不可见的成员属性时,自动触发执行__get()。它有一个参数,表示要调用的属性的名称。
       6)__set():当程序试图写入一个不存在或不可见的成员属性时,PHP就会自动执行__set()。它包含两个参数,分别表示属性名称和属性值。
       7)__tostring()  :当程序使用echo或print输出对象时,会自动调用该方法。目的是希望通过该方法将对象转化为字符串,再输出。__tostring() 无参数,但是该方法必须有返回值。
       8)__clone()  :当程序clone一个对象的时候,能触发__clone()方法,程序希望通过这个魔术方法实现:不仅仅单纯地克隆对象,还需要克隆出来的对象拥有原来对象的所有属性和方法。

103. MVC的概念是什么?
       MVC(即模型-视图-控制器)是80年代发明的一种软件设计模式或者说编程思想。
       M指模型层,V是指视图层(显示层或者用户界面),C是指控制层。
       使用mvc的目的是实现M和V分离,从而使得一个程序可以轻松使用不同的用户界面。
       C存在的目的则是在M和V之间起到调节作用,确保M和V的同步,一旦M改变,V应该能同步更新。
       将M和V分离,就可以做到同一个网页,在不同节日到来的时候能显示不同的页面风格,这只需要提前制作多个视图层模板页面,
       而无需更改M层程序。
       MVC做到了编程中的分工合作,代码的可重用性得到最大化体现,程序逻辑更加清晰而富有条理,便于后期维护管理。

104、     访问权限修饰符有哪几种,对比解释
       答:1、public 表示公共的,在本类中和子类中以及类外,可以对其调用
       2、protected表示受保护的,可以在本类中和子类中调用
       3、private表示私有的,只能在本类中调用
       4、var,效果等同于public
105、     Class关键词前可以有哪些修饰词
       a)    Final修饰,表示该类是最终的,无法继承
       b)    Abstract修饰,表示该类是抽象类

106、     作用域操作符在那些场合下使用
       答:作用于操作符的使用场合
       a)    本类中:
              i.     self::类常量
              ii.     self::静态属性
              iii.    self::方法()   parent::方法()
       b)    子类中:
              i.     parent::类常量
              ii.     parent::静态属性(public或者protected)
              iii.    parent::方法()(public或者protected)
       c)    类外:
              i.     类名::类常量
              ii.     类名::静态属性(public)
              iii.    类名::静态方法(public)

107、     $this,self, parent分别代表什么?哪些场合下使用
       答:$this代表的是当前对象  self代表的是当前的类  parent代表的是当前类的父类
       使用场合:
       $this只能使用在当前类中,通过$this->可以调用当前类中的属性和方法;
       self只能在当前类中使用,通过作用域操作符::访问当前类中的类常量、当前类中的静态属性、当前类中的方法;
       parent只能使用在有父类的当前类中,通过作用域操作符::访问父类中的类常量、父类中的静态属性、父类中的方法。

108、     说明是接口、抽象类二者有何相同和不同的地方?
       1、接口是帮助php实现功能意义上的多继承的,用interface来声明,其方法没有方法体,使用implemens关键词来实现接口。
       接口中只能包含抽象方法和类常量,不可以包含成员属性。
       2、抽象类是一种不能被实例化的类,只能作父类,用abstract class来定义,抽象类和普通类可以没有区别,类中可以包含成员属性、类常量、方法。
       子类得用extends来继承,而且只能是单继承。
       两者相同点是都不可以被实例化,都是需要被继承才可以使用。
       两者的最大区别是接口可以实现多继承,而抽象类只能是单继承。
       接口中不能包含成员属性,而抽象类中可以有成员属性。
       接口中的抽象方法必须是public或者无访问修饰词,接口中的抽象方法不能用abstract来修饰。
       抽象类中的方法可以是普通方法,也可以是抽象方法,如果是抽象方法,一定需要使用abstract来修饰。

109、     解释PHP中单例模式?
       又叫做单态模式、单元素模式、singleton pattern。单例模式指在PHP的应用程序的范围内只对指定的类创建一个实例。使用单例模式的类称为单例类。在php中单例类必须要有一个私有的构造方法,还要有一个私有的魔术克隆方法(该方法体中为空)和一个私有的静态的成员属性$_instance.私有构造方法防止除自身以外的类来实例化它。私有的方法体为空的克隆方法防止该类被克隆。$_instance用来存储被自身实例化后的对象。还必须要有一个公共的静态的方法getInstance()。该方法返回已经存储了实例对象的$_instance。

单例:一个类至始至终只能实例化一个对象,这样的类就是单例类
单例类的优点:① 节省空间 ② 节省资源
实现单例类的四个要点:①私有的构造函数②私有的__clone的方法③私有的静态属性,属性有以保存类的实例④公共的静态方法来实例化对象
无限级分类:
        ①数据库设计:region_id(自增ID) region_name(地区名称) parent-id(上级地区id) region_path(全路径)
       ②程序设计:全路径的作用:a根据全路径顺序取数据 b用作信息层级显示

 110、   什么是SQL注入?
       SQL注入攻击是黑客对数据库进行攻击的常用手段之一。一部分程序员在编写代码的时候,
       没有对用户输入数据的合法性进行判断,注入者可以在表单中输入一段数据库查询代码并提交,
       程序将提交的信息拼凑生成一个完整sql语句,服务器被欺骗而执行该条恶意的SQL命令。注入者根据程序返回的结果,
       成功获取一些敏感数据,甚至控制整个服务器,这就是SQL注入。

111、   如何防止SQL注入?
       要对提交的信息进行过滤,对单引号进行转义。
       首先可以在php.ini中设置,让所有的单引号在提交后都进行转义。或者使用addslashes().

112、     FCKEditor自动过滤的解决办法?
       如果您需要编辑模板页,默认的FCK设置是会去掉<HTML></HTML><BODY></BODY>标签,而且会给你加上<P></P>标签的,如果需要保留的话,只要更改下设置可以了。
       在fckconfig.js里面有:FCKConfig.FullPage = false ;
       改为:FCKConfig.FullPage = true;
       如果想去掉自动添加<P>的代码就可以在这里设置
       默认是
       FCKConfig.EnterMode = 'p' ;    // p | div | br
       FCKConfig.ShiftEnterMode = 'br' ; // p | div | br
       改成
       FCKConfig.EnterMode = 'br' ;    // p | div | br
       FCKConfig.ShiftEnterMode = 'p' ; // p | div | br

113、     $_REQUEST、$_GET、$_POST、$_COOKIE 的关系和区别:   
       1.关系:$_REQUEST包含了$_GET、$_POST、$_COOKIE等的所有内容,是它们的集合体。
       2.通过$_REQUEST获取变量值,PHP页面因为不确定它是哪种传值方式,
       因此会根据php.ini中的配置来接收值。
       php.ini里可以设置,variables_order = “GPC”。其含义是GET,POST,COOKIE.
       所以PHP页面会先从$_GET中获取,再从$_POST中获取,然后从$_COOKIE中获取。
       新获得的值会覆盖之前获取到的值。
       因此从表现形式上看,$_REQUEST最后是获取$_COOKIE中的值,如果$_COOKIE中没有值,
       会获取$_POST中的值,如果$_POST没有获取到 ,就去$_GET中获取。
       如果$_GET中也没有该值,那么$_REQUEST就返回null。

114、     什么是多条件查询(复合查询),如何实现多条件查询?
       如何实现万能查询呢?查询的时候要填写查询条件,这些条件会通过表单进行提交。
       首先需要检查提交的条件是否为空。如果不为空,就认为这个值是要被当作条件,
       我们就可以使用字符串连接的方式来组合一个sql查询语句。
       当执行后获取查询结果。

115.       文件上传需要注意哪些细节?怎么把文件保存到指定目录?怎么避免上传文件重名问题?
       1). 首现要在php.ini中开启文件上传;
       2). 在php.ini中有一个允许上传的最大值,默认是2MB。必要的时候可以更改;
       3). 上传表单一定要记住在form标签中写上enctype="multipart/form-data";
       4). 提交方式 method 必须是 post;
       5). 设定 type="file" 的表单控件,并且必须具有name属性值;
       6). 为了上传成功,必须保证上传文件的大小是否超标、文件类型是否符合要求,上传后存放的路径是否存在;
       7). 表单提交到接收页面,接收页面使用$_FILES来接收上传的文件。$_FILES是个多维数组。第一维下标是上传控件的name,二维下标分别为name/type/tmp_name/size/error。分别代表文件名、文件类型、上传到临时目录下的临时文件名、文件大小、是否有错误。如果是批量上传,那么二维下标就是数组,而并非是字符串。
       8). 文件上传后是被放置在服务器端临时路径下,需要使用move_uploaded_file ()函数,才可以将上传后的文件保存到指定目录。
       9). 为了避免上传文件重名,可以通过上传的文件名获取到文件后缀,然后使用时间戳+文件后缀的方式为文件重新命名。

116.      使用GD2库创建图像的步骤?
       1). 创建一个画布:imagecreate();
       2). 设置画布背景颜色,使用RGB设置颜色:imagecolorallocate();
       3). 设置文字颜色:imagecolorallocate();
       4). 在画布上书写文字:imagestring();
       5).  以 JPEG 格式将图像输出到浏览器或文件:【根据图片格式不同,函数还可以是imagepng()、imagegif()等】   imagejpeg();
       6). 清除图像资源:imagedestroy();

117.      GD2库生成缩略图的步骤是什么?
       1). 读取希望生成缩略图的源图像,创建图像对象:【根据图片格式不同,函数也相应不同】
              $src_image = imagecreatefromjpeg();
       2). 获取原图像的宽度和高度$srcW,$srcH,根据缩放比例计算出新图像的宽度和高度$dstW、$dstH:
       3). 创建一个真色彩的图像对象,宽度和高度设置成刚才计算出的宽度和高度:
              $dst_image = imagecreatetruecolor($dstW,$dstH);
       4). 拷贝图像并调整大小:   imagecopyresized();
       5). 将图像输出:【根据图片格式不同,函数也相应不同】  imagejpeg();
       6). 清除图像资源(将源图像资源和目标图像资源都清除)   imagedestroy();

118.      GD2库给图片增加水印如何做?
       1. 添加简单的文本水印:
              利用imagestring()函数就可以在图片上写文本水印。
       2. 增加一个图形水印:
              1). 读取希望增加水印的源图片,创建图像对象:【根据图片格式不同,函数也相应不同】
                     $image = imagecreatefromjpeg();
              2). 创建一个水印图片的图像对象:
                     $watermark = imagecreatefrompng();
              3). 拷贝并合并图像:
                     imagecopymerge();
              4). 将图像输出:【根据图片格式不同,函数也相应不同】
                     imagejpeg();
              5). 清除图像资源(将源图像资源和水印图像资源都清除)
                     imagedestroy();

119.      什么是事务?什么是回滚?事务的作用是什么?
       事务就是组合起来的几个独立的sql操作。如果其中一项失败,那么就让这几个组合起来的sql操作都回退到未执行状态。这就是事务的回滚。mysql中MyISAM存储引擎的表不支持事务,只有InnoDB 存储引擎的表才支持事务,为了让事务正常执行,就需要让参与事务的所有数据表都设置成innoDB类型。事务被包装在了 BEGIN 和 COMMIT 语句之间。在没有使用 COMMIT 语句的情况下,对数据库的操作不是永久的,一旦运行了 ROLLBACK,就会被回退。只有执行了COMMIT,数据表中的信息才被改动。事务的目的就是为了保证数据的完整性。

120.      模拟SESSION机制实现数据库存放会话数据有什么作用?【备用】
      如果使用默认的SESSION机制,大家都知道默认的SESSION_ID是存放在COOKIE中,用户的身份是靠SESSION_ID来识别的,而COOKIE文件是存放在用户浏览器的客户端,这样就会带来一个问题,当用户在办公室选择一些商品到购物车,在准备下订单付款的时候,用户选择了支付宝在线的支付方式,恰巧办公室的电脑上面没有安装支付宝的数字证书,而在用户家里的电脑安装过数字证书,所以呢,用户就需要回家去支付。但是回家登录商城之后,发现购物车中精心挑选的商品都不存在了。这是为什么呢?问题就在家里电脑上的并没有存放SESSION_ID的cookie文件,因而就无法正确的读取服务器上对应session文件中的数据,所以无法将原来的选择的商品息读取过来。这样的购物车功能给用户的用户体验式非常糟糕的,所以我们就需要采取模拟SESSION机制使用数据库来存放会话数据。

121.       什么是无限极分类?
       要实现无限极分类,数据库建表是关键。
       表结构中至少需要三个字段,如果想避免递归循环,那么需要四个字段。
       1. id ,当前数据的唯一标识;
       2. typename ,类型名称;
       3. parentid , 当前类型的上一层父类型的id;
       4. path , 其中存储当前类型的id和它所有父级类型的id。
       这些id之间采用“-”隔开。
       5. 当通过以下sql语句就可以实现,相同顶级类下的信息都在一起集中显示。
       select * from 表名 where 条件 order by path;
无限极分类的原理是什么?
       要实现无限极分类,数据库表结构是关键。
       表结构中至少需要三个字段,如果想避免递归循环,那么需要四个字段。
       1. id ,当前数据的唯一标识;
       2. typename ,类型名称;
       3. parentid , 当前类型的上一层父类型的id;
       4. path , 其中存储当前类型的id和它所有父级类型的id。
       这些id之间采用“-”隔开。
       5. 当通过以下sql语句就可以实现,相同顶级类下的信息都在一起集中显示。
       select * from 表名 where 条件 order by path;

122.    分页原理是什么?
       数据分页需要以下几个条件:
       1. 参与分页的总条数 【$msg_count】 ,该值通过数据库查询可以获取到;
       2. 每页显示的条数【$pagesize】 ,这个数值由自己定义;
       3. 当前页的页码数 【$page】,该数值通过地址栏传递和接收;
       4. 可以通过以上资料计算出总页数 【$pagecount】 ,此处需要借助ceil();
              【$pagecount = ceil($msg_count/$pagesize);】
       5. 数据库查询借助sql语句中的【limit】来实现数据的变化:
              例如:
              select * from 表名 where 条件 limit $startnum , $pagesize;
              而$startnum = ($page-1)*$pagesize;

123、   如何在smarty模板语言中使用php代码?
       借助于两个smarty内建函数。
       1. inluce_php 函数用于在模板中包含 php 脚本。例如:
       {include_php file="test.php"}
       2. php 标签允许在模板中直接嵌入 php 脚本。例如:
       {php}
              echo "这个是php内建函数的作用";
       {/php}

124、   请列出至少五个smarty中的变量调节符并说明功能?
       default  例如:{$arr|default:'xxxx'} ,默认变量调节器,当变量为空时显示给定的默认值
       truncate   例如:{$articleTitle|truncate:10} , 切割字符串长度为指定的长度;
       count_characters   例如:{$articleTitle|count_characters} ,获取字符串长度;
       strip_tags   例如:  {$articleTitle|strip_tags} ,去除字符串中的所有html标签;
       date_format  例如:{$smarty.now|date_format(‘')} ,格式化时间戳。

125、   写程序实现如下功能:
      a.如何判断一个字符串中是否存在一个字符?
       echo strstr('abcdefgcd'  , 'cd');
       echo strpos('ab0defgcd'  , 'cd');
      b.如何判断一个字符串中一个字符出现的次数?
       echo substr_count('abcdefgcd'  , 'cd');
      c.如何去掉一个字符串的最后一个字符
       echo substr('abcdefgcd'  , 0 ,  -1);

126、     如何使用smarty的缓存、步骤?什么叫单模板多缓存?
       如果给整个网站开启缓存,那么$smarty->caching=1,此时缓存的时间为smarty.class.php中默认的时间,也就是3600秒。如果对每一个页面独立设置缓存,那么$smarty->caching=2 ,缓存时间就会跟display的参数模板页相挂钩,也就是可以实现对每个模板页设置不同的缓存时间。
       用法例如:
       if(!$smarty->is_cached('index.html')) {
              //此处可以执行数据库操作
              $smarty->cache_lifetime = 3600*6;
       }
       $smarty->display('index.html');

       对于例如新闻单条这样的页面,新闻的模板都是一个,如果开启缓存,那么所有的新闻单页的缓存都是一个,根本不会随着id的变化而变换内容。所以为了区分不同的页面缓存,需要使用单模板多缓存技术。具体做法是以id作为display的第二个参数来实现。此外对于具有分页的列表页,也必须在display中使用第二个参数,可以使用新闻类型id和当前页面合并成第二个参数。

127、   写一个递归函数完成以下功能:向函数中传一个多维数组,对数组中所有的值做判断
       ,如果值是'number'则设置该值为0?(提示:该题考的是递归的应用,因为传入的数组不确定是多少维的,所以需要递归判断)

       function recursive_array($arr) {
              if(is_array($arr)) {
                     foreach($arr as $key=>$value) {
                            if(is_array($value)) {
                                   $arr[$key] = recursive_array($value);
                            } else {
                                   if($value=='number') {
                                          $arr[$key] = '0';                                }
                            }}}
              return $arr;
       }    

 
128、   使用jquery写一个全选的例子?
       //全选与取消全选
       function selectAll(flag) {
              for(var i=0; i<$("#fonds input").size(); i++) {
                     $("#fonds input").get(i).checked=flag;
              }}
       //判断复选框已经被勾选了多少个?
       function checkFonds() {
              var count=0;
              for(var i=0; i<$("#fonds input").size(); i++) {
                     if($("#fonds input").get(i).checked==true) {
                            count++;
                     }}
              alert(count);
       }
       //利用后代选择器和get()来获取指定的控件
       $(“div a”).get(2)

129、     请说明smarty中fetch方法的功能?
       Fetch方法可以获取到页面所有的内容,并且赋值到一个变量中。
       如果第四个参数为true,则等同于display,直接输出到浏览器中。
       如果第四个参数为false,则不输出。
       Display方法就是第四个参数为true的fetch方法。
       Display = Fetch() + echo()

130、   写出关于文件上传的相关函数?           
       strrchr($filename , '.');      explode('.' , $filename);
       end($arr);                     strrpos($filename , '.');
       substr($filename , $pos+1);    pathinfo($filename , PATHINFO_EXTENSION);
       date(‘YmdHis')               time()      rand();
       mt_rand()                      move_uploaded_file()

131、   如何将SESSION存放在数据库中,可以结合数据表设计说明.
       默认情况下php.ini中session.save_handler = files,也就是session是以文件形 式存储的。
       如果想更改为数据库或其它存储方式,那么需要更改设置,让 session.save_handler = user。
       除了在php.ini中配置外,还可以在PHP页面中单独配置,用
       ini_set ('session.save_handler, 'user')来设置session的存储方式,设置为用户自定义存储方式。
       设置好存储方式后,需要使用session_set_save_handler()函数。
       该函数是设置用户级别的session保存过程的函数。该函数有6个参数,这6个参数其实是6个自定义函数的名称,分别代表对session的开启,关闭,读,写 ,销毁,gc(垃圾回收)。
       示例代码如下:
       function open () { }
       function close() { }
       function read () { }
       function write () {}
       function destroy () {}
       function gc () {}
       session_set_save_handler ("open", "close", "read", "write", "destroy",  "gc");
       session_start();
       现在你就可以象往常一样地使用session了。
       数据库结构如下:
       Session_id , session_value ,expire_time , 分别存储sessionid的id和值以及失效时间。

132、    常用的正则表达式写法:
       中文:/^[\u4E00-\u9FA5]+$/
       手机号码:/^(86)?0?1\d{10}$/
       EMAIL:
       /^[\w-]+[\w-.]?@[\w-]+\.{1}[A-Za-z]{2,5}$/
       密码(安全级别中):
       /^(\d+[A-Za-z]\w*|[A-Za-z]+\d\w*)$/
       密码(安全级别高):
       /^(\d+[a-zA-Z~!@#$%^&(){}][\w~!@#$%^&(){}]*|[a-zA-Z~!@#$%^&(){}]+\d[\w~!@#$%^&(){}]*)$/
——————————————————————————
                    PHP初   
——————————————————————————
order顺序
var(variables)变量
model典型 样式 模型
module模数;模块;组件
enctype
SEO搜索引擎优化(Search Engine Optimization)
Search搜索
Engine 引擎
Optimization最佳化,最优化
mod_rewrite模块重写
CMS 内容管理系统(content manage system)
electronic commerce(电子商务)
gc(garbage collection)垃圾回收

---------------Apache与WAMP安装---------------
1.wamp安装
apache (2.2版本) mysql(5.067版本)  php(5.2版本)

LAMP  Linux下的安装
负责版本控制 SVN
一台机器能安装多个apache服务 但是只能安装一个MySQL服务
-------------PHP上-------------
PHP: personal home page  个人家庭主页  94年产生的 5.2.6版本
ASP: active  server page   93
JSP: java server page

类里面定义常量叫类常量 用const定义
类常量必须有初始值
define('','','false/true')里有三个参数,默认为false时区分大小写,反之不区分大小写
在类里面叫做方法  在类外叫做函数
常量默认为大小写敏感。
::作用域操作符

标量和非标量类型的区别:标量只能存一个数据,非标量能存多个数据
(属性  变量名  类常量)区分大小写
(变量  类名  系统自带函数  自定义函数)不区分大小写
 当$_POST['user_name']等没加‘'是会先当作常量来编译
3.函数
可变函数:函数的名字是一个变量
可选参数:参数有默认值
递归(recursive)函数体内有一个循环体,自己调用自己,但他跟死循环有区别,死循环是没有尽头的,     他是无限循环,递归有尽头,他最终会获得一个值
function pager( $page $msg_count $pagesize $url="?"){
}----》$url="?"即为可选参数

  数组的合并 array_merge()
             $arr1+$arr2
两数组相加: 只要是具有相同的下标,则只保留首次出现的元素,后者舍去
array_merge:索引数组会将后者的元素附加到前者后面;若是关联数组,相同下标,后者覆盖前者
   explode() 取数组最后一个元素
8.文件的操作
   mkdir新建目录
   rmdir删除目录
   skandir输出指定路径下的文件或目录
   fopen(资源)— 打开文件或者 URL
   fclose— 关闭一个已打开的文件
   fgets — 一次读取一行
   fgetc — 一次只读取一个字符
   fgetss — 一次读取一行并过滤掉 HTML 标记
   file_get_contents — 将整个文件读入一个字符串
   fread-读取文件
   file_put_contents— 将一个字符串写入文件
   fwrite-写入文件
   unlink-删除文件
   pathinfo — 返回文件路径的信息
array_push — 将一个或多个单元压入数组的末尾(入栈)
array_unshift — 在数组开头插入一个或多个单元
9.其它函数
   输出控制函数:ob(output buffer) ob_flush
   加密函数 md5
   数学类函数:abs绝对值,rand随机数,ceil取整,floor,mt_rand生成更好的随机数
   转换函数:explode 使用一个字符串分割另一个字符串,implode
   时间函数:date(),strtotime (将字符串转换为时间戳)
   处理地址栏: url_encode url_decode
10.乱码问题
   ASCII(American Standard Code for Information Interchange)81年产生
   ANSI 美国国家标准学会( American National Standards Institute)
   utf-8(-8代表一次传输8个字符)可变字节编码(中文3个字节)(utf:Unicode转换格式(UCS Transformation Format) 
   utf-16(-16代表一次传输16个字符)
   GBK. 国家标准扩展码(Guo-Biao Kuozhan)90年产生(双字节编码)
   GB2312 因为国际排行2312位(81年产生)
   BIG5
   unicode (国际编码)可变字节编码
   Latin_1
   utf-8+ bom
   ISO:国际标准化组织(International Standardization Organization)

11.数据库操作
   数据库优化:char(查询速度快)
              varchar
       引擎:myisam(mysql indexed sequential access method)索引顺序访问方法
       支持事务的引擎:BDB ,innodb
       innodb:是以inno开头的一家公司的商标
  表类型就是表的存储引擎  
 dll:动态数据连接库  封装的类库

修饰符:public,var,protected,private,static,final,abstract
访问权限修饰符:public,private,protected
       public:类成员访问没有限制,多有外部成员都可以访问
       protected:受保护的,不能被类外部成员访问,该类的直接子类可以访问,可以实现对成员属性的读、写操作
       private:私有的,只能类里边的成员自己访问,类外部的成员都不能访问
       一个属性被修饰为私有的(private),那么这个属性在类的外部是不可以读取和修改的,现在有一种方法 可以设置该属性既是私有的,还可以被类的外部成员读取即__get()和__set()

 修饰class的修饰符:final,abstract(抽象)
final被它修饰的类是不能被继承的
定义属性必须要加修饰符:可以是public和var
定义方法时可以有修饰符public,可以不写,默认为public

如果父类中的方法被声明为final,则子类无法覆盖该方法; 如果一个类被声明为final,则不能被继承。
final只能出现在class类和方法中

方法前可以有public,private,protected,static,final,abstract修饰。
    继承性:耦合性越低越好
 const修饰,一定要有初始值 ( smarty的保留变量:{$smarty.now},{$smarty.const},{$smarty.post},{$smarty.get},{$smarty.cookies},{$smarty.config},{$smarty.session},){$smarty.capture}
 调用属性时,如果前有$后边就不能有,后有前不能有,如:$this->abc
                                              self::$abc
当用parent调用父类方法时,将方法自动转化为静态的
  多态性:由继承  重写(覆盖)(重新写一遍)(override重写)造成的
            php不支持重载(重复载入),php为弱变量语言(overload重载)

抽象:一个类包含抽象方法就是抽象类,抽象类中不一定有抽象方法
抽象类的定义abstract
接口里可以有抽象类,还可以有类常量,通过interface来定义一个接口,
实现多个接口时,接口中的方法不能有重名。
接口中定义的所有方法都必须是public,这是接口的特性。
接口里的方法必须被重写
静态:static 不能与构造方法共存,static不能new对象,构造方法可以new对象,方法体中不能用$this

在php5以前的版本中,当普通构造方法和__construct(魔术方法)共存在时,它会调用普通构造方法,它对__construct(魔术方法)是不识别的,在php5以后的版本中,当共存时他会先调用__construct(魔术方法)。析构方法是最后被执行的,被自动调用的方法
单例(单态)singleton
——————————————————————————
                    PHP中   
——————————————————————————
2.jQuery
  包括javascript框架和prototype.js框架
选择器:
  1.基本选择器:
    ①、$('#result')=jQuery('#result')=document.getElementById('result')
                           <div id='result'>
                        <div class='result'>
   ②、class选择器 $('.result')
   ③、元素选择器$('div')
  2.子代选择器:$('#myform < input')
  3.后代选择器:$('#myform  input')
  4.组合选择器:$('#myform < span < input')
3.Ajax
 ajax的用处是用来异步js和xml 不仅可以获取xml数据,还可获得hmtl和json数据
   ajax的优点:1.提升用户的体验2.占用带宽小3.减小服务器的负载
   ajax就是把B页面的内容,显示到A页面的指定位置,实现异步传输
   $.ajax() 返回其创建的 XMLHttpRequest 对象。
   $.ajax({
    url:,  data:,  type:,  datatype:,  success:function(这个参数里,存在被传回的页面的所有内容){}   });
  $.post('请求地址','传递参数','回调函数');
  $.get('请求地址','传递参数','回调函数');
post传值文件没有大小限制,保密性好,必须有form表单
get传值安全性不高,有大小限制
当地址栏里有中文时,用urlencode(编码 URL 字符串)
urlencode — 编码 URL 字符串
urldecode(解码已编码的 URL 字符串)

4.会话控制

      session:unset()和array() 是连同内存和session文件内容一起删除,而session_destroy只是将文件删除
   cookie没有生命周期的叫会话cookie,随着浏览器的关闭,cookie消失
   cookie有两种存在方式,一种是以文件形式存在,另一种是保存在内存里
   cookie里面只能存字符串
  会话控制主要是为了跨页面传值
序列化是把其他的类型转换成字符串类型
5.smarty
代码重用(include,require,include_once,require_once)
include require 比 require_once include_once 性能高
 加载类文件用 require_once(最好) include_once

6.PDO
   dsn(data source name)
   //数据源
   $dsn = 'mysql:host=127.0.0.1;dbname=java1008a';
die('到此结束'); 等同于 echo '到此结束';die;

----------------------------------------------------------------------------------

2.b/s与c/s简单比较,区别:
--a、运行环境不同(广域网、局域网)
--b、安全级别不同(低/高)
--c、用户群不同(全部用户/局部用户)
--d、系统升级不同(无缝升级/整体升级)
--e、用户开启不同(浏览器/特制软件)
--f、软件界面特点不同(信息流/用户体验)
  比如:b/s就是网上的微博、博客;c/s就是在网吧打的网络游戏(奇迹、传奇等)
3.php是什么:运行在服务器端的脚本语言
--Hypertext Preprocessor
--personal home page
4.php语言能做什么
--图形化用户界面程序
--服务器端运行脚本程序

3.php外部变量$_POST[]、$_GET[];

  特殊运算符
  '.'是连接符
  ".="是连接赋值
  "@"屏蔽错误信息  $link=@mySQl_connect(主机,用户名,密码)
5.流程控制(顺序、选择、循环)
******************************************************************************
******************************************************************************
第三单元【字符串】
1.字符串的三种定义方式(单引号、双引号、定界符)
---单引号定义(转义\'和\\)
---双引号定义(转义\n \r \t \$ \\ \")
---定界符方法<<<eof

2.函数部分
explode/implode
substr()**
str_replace/trim/ltrim/rtrim

strstr(str, search)获得指定字符串最开始出现到最后的内容
strrchr(str, search)获得指定字符串最后出现到最后的内容
strpos(str,  search)获得指定字符串最开始出现的位置
strrpos(str, search)获得指定字符串最后出现的位置
ucfirst(str)将字符串第一个字母大写
ucwords(str)将字符串的每个单词的第一个字母大写
strlen(str)获得字符串长度
strcmp(str1, str2)比较两个字符串大小,
                返回负数表示 str1 小于 str2;
                返回正数表示 str1 大于 str2;
                返回零表示二字符串相同

urlencode(str)替换所有非字母数字的字符,变为%后面跟两位16进制数,空格变为+号
urldecode(str)对已%##编码的URL进行解析还原
parse_url(str)解析完整的url转变为为数组
parse_str(str,out)解析请求字符串转变为数组
htmlspecialchars()转换html代码为实体代码
printf/sprintf %b %d %c %x %s %f %X
–    b           整数转成二进位。
–    c            整数转成对应的 ASCII 字符。
–    d           整数转成十进位。
–    f            单倍精确度数字转成浮点数。
–    o           整数转成八进位。
–    s            转成字符串。
–    x            整数转成小写十六进位。
–    X           整数转成大写十六进位。

1.数组和栈的操作
  array_push(目标数组,字符串)将字符串压入数组的最后
  array_pop(目标数组)将数组最后的元素弹出并返回
2.数组和队列的操作
  array_unshift(目标数组,字符串)将字符串放到数组的开始位置
  array_shift(目标数组)删除数组的第一个元素并返回
3.数组和指针的操作key() current() next() prev() reset() end()
4.预定义数组($_GET $_POST $_FILES $_COOKIE $_SESSION)
******************************************************************************
******************************************************************************
第六单元【其他常用函数】
date(format,[timestamp])//格式化时间信息,并返回
time()//返回当前时间戳信息

mktime(hour,minute,second,month,day,year)
mktime(小时,分钟,秒,月,天,年)//取得一个日期的 Unix 时间戳

max()//取得最大值
-echo max(1, 3, 5, 6, 7);  // 7
-echo max(array(2, 4, 5)); // 5
-echo max(0, '1hello');     // 1hello
-echo max('hello', 0);     // hello
-echo max(-1, 'hello');    // hello
-echo max(array(2, 4, 8), array(2, 5, 7)); // array(2, 5, 7)
-echo max('string', array(2, 5, 7), 42);   // array(2, 5, 7)数组和非数组比较数组总认为最大

mt_rand(65,94)//获得随机数
round()//四舍五入取整
flush()//输出准备区内容
urlencode('张三')//返回字符串中,除了-_.之外的所有非字母数字部分为%后接两位
16进制数,空格转化为+
urldecode()//对已经编码的部分反编码
var_dump()//输出变量的详细信息(八种数据类型数据都可以输出)

chr(mt_rand(65,94))随机获得字母
ord(chr(mt_rand(65,94)))将字母转化为数字
basename(路径名)获得路径中文件名部分
strtolower转换小写

第七单元【php连接mysql】
*mysql_connect(主机,用户名,密码) 打开一个到 MySQL 服务器的连接
*mysql_select_db(数据库,连接数据库资源) 选择 MySQL 数据库
*mysql_query("set names utf8");设定字符集        
*mysql_close() 关闭 MySQL 链接
*mysql_query(语句) 发送并执行一条sql语句
mysql_fetch_row(结果资源)从结果集中取得一行结果(索引数组)
mysql_fetch_assoc(结果资源)从结果集中取得一行结果(关联数组)
*mysql_fetch_array(结果资源)从结果集中取得一行结果(索引/关联数组)
mysql_fetch_object(结果资源)从结果集中取得一行结果(对象数组)

mysql_errno()返回错误号码
*mysql_error()返回错误信息
*mysql_num_rows(结果资源)用于计算查询结果中所得行的数目
*mysql_affected_rows()获得受影响的结果数目
*mysql_insert_id()传回最后一次使用 INSERT 指令产生的自动增长 ID 值

mysql_result(结果集,索引行,字段)指定获取结果
mysql_free_result(结果资源)释放结果集
mysql_num_fields(结果资源)用于计算查询结果中所得列的数目
mysql_fetch_field(结果资源)从结果集中取得列的结果,以对象形式返回
mysql_pconnect()永久连接数据库

1.留言板建立数据库bbs,建立两张表leave_word和back_word(留言表和回复表)
  leave_word:
  字段       数据类型
  id        int         主键、自增
  title     varchar(20) 标题
  content   text        内容
  itime     datetime    添加时间

  back_word:
  id        int         主键、自增
  leave_id  int         外键(留言id)
  content   text        内容
  btime     datetime    回复时间
4.删除留言,对无效、无用的留言实现删除功能(这时需要用get方式传递被删除留言id值)
5.修改留言,对需要修改(get方式传递被删除留言id值,再利用隐藏域方式传递给接收页面)
6.留言详细显示功能,有的留言内容比较多,在明细页面不可能全部显示出来(这时利用get方式传递留言id)
7.在详细页面可以实现回复功能和回复留言展示,步骤:制作一个回复表单和接收数据页面

     3.构造方法和析构方法
       构造函数:实例化对象首先第一个需要做的事情就是构造函数。一个小孩出生到5岁之前,所有的事情都是父母帮助做的,包括起名字、穿衣服、吃饭等等。
       析构函数:一个对象被使用完后需要做一些善后工作,这些善后工作是不需要人为干预的,例如资源释放、变量删除等。例如:一个小狗死后,主人非常爱惜它,就把它埋在了家后园的一颗树下。小狗被埋这件事情是主人做的,不是狗做的。这就是析构函数。

     3.类的重写
       子类和父类之间的事情,就是说父类有的方法,子类不但可以直接使用,还可以在子类中
       重新定义具体内容,例如有一个父亲会驾驶汽车,那么他的儿子也会驾驶汽车,但他的儿子
       可以不驾驶汽车,而驾驶飞机,这就是类方法的重写。

D    1.final(最后的)关键字使用
       该关键字修饰的类不能被继承
       该关键字修饰的方法不能被重写
     2.static(静态)关键字使用(类的内部、外部、子类)
       实例化对象在内存中的分配有讲到大的数据在内存被分配到堆空间里边。现在有一个例子:有一个
       "学生"这个类,里边有一个成员属性是"国家",标识该对象是属于哪个国家的,比如美国、英国、德国等 ,这个类在实例化对象时候,每个对象在内存中都会分配一个空间用于存放国家这个成员属性,如果
     有100个对象,那么在内容中会分配100个相应的空间。如果这个类的使用对象是在"中国"境内,那么
     每个对象的国家属性就会是一样的,即"中国",相应的在内存中会有100个空间存放100个相同的内容
     这会造成空间浪费,其实到这里我们可以知道100个相同的内容用一个空间存放就可以,反正都是一样的,
       这就产生了静态化概念"static"。
       用static修饰的成员属性,该属性就不是对象的,而是类的。
     3.self和parent关键字使用
       在类的内部访问类中的成员(属性和方法),可以用"$this",该关键字泛指对象,这是访问一般的类
       成员,如果访问的成员是用static关键字修饰的,就不能用"$this"了,因为用static修饰的类
       成员是被类本身拥有,不属于任何对象了,这时候需要用"self"关键字修饰 self::成员
       在类的外部访问类本身拥有的成员可以这样  类名::成员属性。
       在子类中访问父类拥有的成员可以用parent关键字  parent::成员属性
     4.const(常量)关键字使用
       在php中可以定义常量,类外部用define定义,类内部用const定义。
       常量的拥有者是类本身,类内部访问常量用 self::常量
                      类外部访问常量用 类名::常量
                    子类访问常量    parent::常量
     6.魔术方法clone、__call、__autoload使用
     clone:在一个项目里边我们有时候需要两个或多个完全一样的初始化对象,这时候可以使用clone技术
     不用clone技术也可以,不过每个新的对象都需要初始化属性值,这样比较繁琐,也容易出错,
使用clone就比较简单,克隆出来的多个对象彼此是独立的,互不相干。
           $p2 = clone $p1;
   __call:在类的使用过程中,如果一个对象调用的方法不在类里边,那么这时候程序要报错,然后程序退
          出不能继续运行。这样做用户体验非常不好,如果有一种方法可以使得程序报错完后可以继续运
行,这样的程序给人更智能、用户体验更好的感觉,这时候就可以用__call
             public function __call($method_name,$args){
              echo "你访问的方法:";
              echo $method_name;
              echo "参数:";
              print_r($args);
              echo "不存在";
             }
       __autoload:开发一个软件系统,往往里边会有很多类,在初始化类对象之前需要先include这个对
                象对应的类文件。所有的类不能都放到一个文件(文件臃肿,不易维护),这样就会在程
              序开始处有很多的include列表,这样做非常繁琐,出现一个新的类就需要被include,
              有没有一种方法可以使得被include的类文件在实例化对象时候才引入,否则不动作,
              答案是有的,这时候可以用魔术方法__autoload
                function __autoload($className){
                     include($className.'.php');
                }
     8.子类继承父类时候成员修饰符限制,子类的修饰级别大于父类。例如父类的修饰符是protected,
       则子类修饰级别是protected或public。父类是public的,子类也必须是public的

    1.抽象类
       在类里边定义的没有方法体的方法就是抽象方法,有抽象方法的类被称为抽象类。抽象类不能实例化对象。
       所谓没有方法体就是方法在声明时候没有花括号和里边的内容。
       作用之处:
         例如:我有一个类"动物",里边有方法"吃食"(还可以有许多其他的方法)
        动物这个类可以有许多子类例如:狗、鱼、鸟等,这些子类有一个共性就是都有吃食这个方法
        一般的解决方法是:定义3个类,里边都有吃食方法。这样实现没有问题的,但是如果其中一个
        类没有吃食方法,这时候程序是不给报错的。我们现在要做的就是3个类中任何一个没有吃食方法
          系统就要报错。这时候就需要用到抽象类了。
       抽象类按照字面意思理解就是对3个类的进一步抽象。抽象出来吃食方法。
       抽象类技术特性:
       a、抽象类不能实例化
       b、类的成员方法是抽象的,则这个类也是抽象的
       c、抽象方法体内没有实现细节,具体实现留给子类实现
       d、继承抽象类的子类必须实现父类的抽象类,除非自己也是抽象类。

     2.接口(插座实例)
       当一个抽象类里边的全部方法都是抽象方法时候,这个抽象类就是"接口"。
       接口技术特性:
       a、interface声明
       b、全部接口方法是public的,因此可以省略
       c、接口只定义方法,没有具体方法实现
       d、实现类用implements实现接口,全部接口方法都要实现
       e、接口可以多实现,中间用逗号分开
       f、接口是对抽象类的抽象,抽象类是对类的抽象,类是对事物的抽象。
       g、接口不能实例化
       (1)、抽象类和接口有什么不同
        抽象类只能单继承,接口可以多实现
        抽象类里面可以有抽象方法和普通方法,而接口里只有抽象方法
        抽象类里面可以有自己的属性,而接口里面只能有常量
        接口里面的方法必须是public的,而抽象类不同
       (2)、抽象类和接口的相似之处
        抽象类里面的抽象方法在继承的时候必须都要重写,接口里面的方法也必须都要实现。
        抽象类和接口都不能直接实例化,
       抽象类需要继承(extends),接口需要实现(implements)。
        抽象类和接口都体现了多态的特性。

3.jquery
       jquery是js的封装包,里边有很多集成的函数可以让我们使用,jquery的宗旨就是写更少的代码实现更多的功能
       使用的方法:
       1.引进jquery包
              <script type="text/javascript" src='jquery-1.4.2.js'><script>
       2.测试jquery是否加载成功
              $(function(){
                     alert("jquey加载成功");
              })
       3.获取页面的元素
              $('#div');通过id获取页面元素 
              $('.div');通过class获取页面元素
       jquery中的事件
       1.$('#mydiv').click(function(){});鼠标点击事件【要写在onload事件里边】
       2.$('#mydiv').hover(function(){},function(){});鼠标移动到对象事件
       3.$('#mydiv').attr();获得对象属性信息
       4.$('#mydiv').attr('checked');查看单复选框的选定情况!
       5.$('#mydiv').css();获得对象的属性信息
       6.$('#mydiv').css(样式,值);给对象赋予样式
       7.$('#mydiv').addClass('trb');给元素class属性赋值trb;
       8.$('#mydiv').removeClass('trb');使元素失去class属性;
       9.$('#mydiv').submit(function(){});提交事件;
       10.$('#mydiv').keyup(function(){});键盘敲击事件;    
       在项目中的使用:表单的验证

相关文章

最新评论