!!
--------------------------------------------------------------------------------------
__invoke()魔术方法:
将对象当作函数来使用的时候,会自动调用该方法。通常不推荐这么做。
class A{
function __invoke(){
echo “<br />我是一个对象呀,你别当我是一个函数来随便调用!”;
}
}
$obj1 = new A();
$obj1(); //此时就会调用类中的方法:__invoke()
--------------------------------------------------------------------------------------
与类有关的魔术常量:
魔术常量:
__FILE__
__DIR__
__LINE__
现在:
__CLASS__: 代表当前其所在的类的类名;
__METHOD__:代表其当前所在的方法名;
--------------------------------------------------------------------------------------
与类有关的系统函数:
class_exists(“类名”), 判断一个类是否存在(是否定义过)
interface_exists(“接口名”), 判断一个接口是否存在(是否定义过)
get_class( $obj ), 获得某个对象$obj 的所属类
get_parent_class($obj ), 获得某个对象$obj 的所属类的父类
get_class_methods(), 获得一个类的所有方法名,结果是一个数组,里面存储的是这些方法的名称
get_class_vars(), 获得一个类的所有属性名。结果是一个数组,里面存储的是这些属性的名称
get_declared_classes() 获得“整个系统”所定义的所有类名;
--------------------------------------------------------------------------------------
与对象有关的系统函数:
is_object( $obj ): 判断某个变量是否是一个对象;
get_object_vars( $obj ):获得一个对象的所有属性;结果是一个数组,里面存储的是这些属性的名称
--------------------------------------------------------------------------------------
与类有关的运算符:
new,
instanceof: 判断一个“变量”(对象,数据),是否是某个类的“实例”;
示意如下:
class A {}
class B {}
class C extends A{}
$a1 = new A();
$b1 = new B();
$c1 = new C();
$v1 = $a1 instanceof A ; //结果是true
$v2 = $b1 instanceof A ; //结果是false
$v3 = $c1 instanceof C ; //结果是true
$v4 = $c1 instanceof A ; //结果是true
--------------------------------------------------------------------------------------
static关键字的新用法和总结:
static这个关键字,也可以像“self”一样,代表“当前类”,用于访问一个类的“静态属性或静态方法”;
但,static,在应用中,更灵活,因此更常见!
因为static,它代表的是“调用”当前方法的类,而不是“其代码所在的类”:
self它就比较死板,只代表这个单词本身所在位置的所在类。
--------------------------------------------------------------------------------------
static关键字的使用总结
含义: 位置示例:
代表函数或方法中的静态变量 fucntion f1(){
static $v1 = 1;
}
代表类中的静态成员 class A{
static $p1 = 1;
static function f1(){...}
}
代表调用当前方法的“当前类” class A{
function f1(){
echo static::属性或方法
}
}
--------------------------------------------------------------------------------------
面向对象编程思想的3个特征:
封装:
其基本做法是:尽可能地将一个类的成员私有化,只开放那些必不可少的对外的属性或方法,能private的就不要protected。能protected就不要public
继承:
是面向对象的基本思想和基本做法。
继承是代码重用的一种重要机制。
多态:
两种表现形式:
1, 不同对象,使用相同的方法,会表现为不同的结果!
2, 同一个对象,使用相同的方法,也可能会表现为不同的结果——这其实是“方法重载现象”
--------------------------------------------------------------------------------------
mvc思想原理 17.doc
--------------------------------------------------------------------------------------
显示与逻辑相分离思想
原始做法:显示与逻辑混合
显示与逻辑相分离做法:
逻辑,可以认为就是php的“后台代码”对数据的处理。
显示,可以认为就是会在浏览其中“展示”的html和css等相关代码;
很显然,显示的“内容”,必然会需要“逻辑运算”之后的某些数据结果。
则,其基本模式大致可以这样(用一个网页来表示):
<?php
data1 = 计算。。。;
data2 = 计算。。。;
.......
?>
<html>
<head> </head>
<body>
html代码。。。<?php echo data1; ?>html代码。。。
html代码。。。<?php echo data1; ?>html代码。。。
</body>
</html>
再,将上述代码,“分离开”,结果就是:
php文件:
<?php
data1 = 计算。。。;
data2 = 计算。。。;
.......
include ‘html文件’;
?>
html文件:
<html>
<head> </head>
<body>
html代码。。。<?php echo data1; ?>html代码。。。
html代码。。。<?php echo data1; ?>html代码。。。
</body>
</html>
--------------------------------------------------------------------------------------
模板技术
就是,对于相同的数据展示需求,使用不同的页面表现文件去展示这些数据,就形成了所谓“模板技术”:
php文件(p1.php):
<?php
data1 = 计算。。。;
data2 = 计算。。。;
if( 条件1 ){
include v1.html
}
else if (条件2 ){
include v2.html
}
。。。。。
?>
html文件(模板文件):
v1.htm;
v2.html;
v3.html
--------------------------------------------------------------------------------------
mvc思想原理
mvc思想简单演示
数据生产文件(模型文件):
class model {
function 方法1(){。。。。return 数据1;}
function 方法2(){。。。。return 数据2;}
。。。。。
}
控制文件:
<?php
if( 条件1 ){
data1 = 通过模型获得数据1;
data2 = 通过模型获得数据2;
include ‘html文件1’
}
else if(条件2 ){
data3= 通过模型获得数据3;
data4 = 通过模型获得数据4;
include ‘html文件2’
}
.......
?>
视图文件:
html文件1:
html 文件2:
--------------------------------------------------------------------------------------
模型层(Model)的典型实现
模型层的主要作用:
根据控制器的“要求”(其实就是调用),去生产相应的数据并返回给控制器;
很多时候,控制器需要传递一定的信息过来,才能“生产”对应所需要的数据;
模型层的典型代码模式:
class model {
function 方法1(){。。。。return 数据1;}
function 方法2(){。。。。return 数据2;}
。。。。。
}
--------------------------------------------------------------------------------------
控制器中调用模型层获取数据的典型做法
$obj = new 模型类(); //获得某个模型类的对象
$data1 = $obj->方法1(); //获得一份数据;
$data2 = $obj->方法2(); //再获得一份数据;
$obj2 = new 模型类2();//获得另一个模型类的对象
$data3 = $obj2->方法1();
--------------------------------------------------------------------------------------
基础模型类:
因为,所有模型类,都需要跟数据库打交道,也就是进行数据库的操作,则我们将所有模型类的共同部分——mysqldb工具类(的实例)——放如一个共同的父类中,这就是基础模型类;
class BaseModel (){
protected $_dao = null;
function __construct(){
$config = array(..连接数据库的基本信息..);
$this->_dao = MySQLDB::GetInstance( $config );
}
}
class Model1 extends BaseModel{}
class Model2 extends BaseModel{}
。。。。。
--------------------------------------------------------------------------------------
实现模型类的单例——单例工厂:
class ModelFactory{
private static $arr = array(); //空数组,用于存储每个模型类的“唯一实例”;
function GetModel( $model_name ){
if( 如果该数组中不存在$model_name这个单元 或 该单元不是 $model_name 的实例 ) {
static::$arr [$model_name] = new $model_name();
}
return static::$arr [$model_name]
}
}
--------------------------------------------------------------------------------------
控制器的典型实现
控制器的作用
获取请求数据
根据请求信息,以决定,调用哪个模型以获取什么数据;
根据请求信息,载入哪个视图文件以显示该(些)数据
数组函数in_array()的用法:
$a=array('aaa','bb','cc');
$v1=in_array('aaa',$a);//true
$v2=in_array('abc',$a);//true
$v3=in_array('aa',$a);//true
--------------------------------------------------------------------------------------
控制器类的常规做法
其功能:
1,用于获取用户的请求数据,
2,(或)获取模型数据,
3,显示到视图中——或也可能直接输出;
--------------------------------------------------------------------------------------
控制器中的“动作”:
一个控制器,就是一个类;
一个控制器中,就只包含了一些方法!
这些方法,被称为“动作”
习惯上,所有的动作(方法),都以“Action”这个词为结尾。如:function DelAction(){...}
网页的连接(或跳转或提交)的时候,act=XXX会写成a=XXX
<a href='?a=del&id=<?php echo $rec['user_id']; ?>' onclick='return queren()'>删除</a>

Prev | Next
Pg.: 1 2 3 4 5 6 7 8 9


Back to home | File page

Subscribe | Register | Login | N