2,out:用于设定该变量是用来“存储存储过程中的数据”的,即“传出”,即函数中必须对他赋值;
3,inout:是in和out的结合,具有双向作用;
4,对于,out和inout设定,对应的实参,就“必须”是一个变量,因为该变量是用于“接收传出数据”;
--------------------------------------------------------------------------------------
调用存储过程:
call 存储过程名 (实参1,实参2,.... )
删除存储过程:
drop procedure 存储过程名;
--------------------------------------------------------------------------------------
在php中使用存储函数或存储过程的示意
<php
//调用存储函数:
$v1 = $_POST[‘a’];
$v2 = $_POST[‘b’];
$sql = “insert into tab1 (id, f2, f3) values ( null, now(), func1($v1 , $v2 ) )”;
$result = mysql_query($sql);
//调用存储过程:
$v1 = $_POST[‘username’];
$v2 = $_POST[‘pass’];
$v3 = $_POST[‘age’];
$sql = “ call insert_user($v1, $v2, $v3 ); ”; //insert_user()是一个存储过程,带3个参数,会将该3个参数数据写入(insert)某个表中。
$result = mysql_query();
另一个使用存储过程返回结果集的例子:
$id = $_GET[‘id’];
$sql = “call Get_User_Info( $id ) “; //Get_User_Info()是一个存储过程,其中会返回某个指定id的用户信息
$result = mysql_query($sql); //这里得到的就是“结果集”了
?>
--------------------------------------------------------------------------------------
触发器(trigger)
定义形式:
create trigger 触发器名 触发时机 触发事件 on 表名 for each row as
begin
//这里,才是编程的位置,也就是触发器的内部语句
end;
说明:
1,触发时机,只有2个: before(在....之前), after(在....之后);
2,触发事件,只有3个:insert, update, delete
3,即其含义是:在某个表上进行insert(或update,或delete)之前(或之后),会去执行其中写好的代码(语句);即每个表只有6个情形会可能调用该触发器;
4,通常,触发器用于在对某个表进行增删改操作的时候,需要同时去做另外一件事情的情形;
5,在触发器的内部,有2个关键字代表某种特定的含义,可以用于获取有关数据:
new:它代表当前正要执行的insert或update的时候的“新行”数据;通过它,可以获取这一新行数据的任意一个字段的值,形式为:
set @v1 = new.id; //获得该新插入或update行的id字段的值(前提是有该id)
set @v2 = new.age; //同上;
old:它代表当前正要执行的delete的时候的“旧行”数据,通过它,可以获取这一旧行数据的任意一个字段的值,形式为:
set @v1 = old.id; //获得该新插入或update行的id字段的值(前提是有该id)
set @v2 = old.age; //同上;
--------------------------------------------------------------------------------------
面向对象中的基本概念
类和对象
对象: 万物皆对象;
类: 任何对象,都可以人为“规定”为某种类型(类别);
class Person{
var $name ;
var $age;
var $edu;
}
$obj1=new Person();
$obj1->name='张三';
$obj1->age=18;
$obj1->edu='大学';
echo"<pre>";
var_dump($obj1);
echo"</pre>";
--------------------------------------------------------------------------------------
属性和方法
现在的做法(面向对象):
class MyDreamGirl{
var $name="小花";//属性
var $age=18;
var $edu="大学";
function xiyifu(){//方法
echo "<br />{$this->age}岁的{$this->edu}学历的{$this->name}干什么";
}
function zuofan(){
echo "<br />{$this->age}岁的{$this->edu}学历的{$this->name}干什么";
}
}
$obj1=new MyDreamGirl();
$obj1->xiyifu();
$obj1->zuofan();
--------------------------------------------------------------------------------------
创建对象的几种形式
class C1{
var $p1 = 1; //定义一个属性;
}
形式1:
$o1 = new C1(); //通过一个类,去new出一个对象
形式2:
$o2 = new $o1(); //通过一个对象,去new出一个对象——其实是new出来的是旧对象所述类的一个新对象。
形式3:
$s1 = “C1”; //只是一个字符串变量而已;
$o3 = new $s1(); //这就是所谓的“可变类”——无非就是类的名字是一个变量而已。
形式4:
$o4 = new self(); //self表示“当前类本身”,它只能出现在一个类的方法中。
--------------------------------------------------------------------------------------
值传递 $o2=$o1;
引用传递 $o4=& $o3;
--------------------------------------------------------------------------------------
类中成员分为3大类:
属性:
方法:
常量:
形式上,大致如下:
class 类名 {
常量定义1;
常量定义2;
.......
属性定义1;
属性定义2;
........
方法定义1;
方法定义2;
.......
}
详细一点,就又分为:
属性:
普通属性;//一般属性,实例属性
静态属性;
方法:
普通方法;//一般方法,实例方法
静态方法;
构造方法;
析构方法;
常量:
--------------------------------------------------------------------------------------
类常量
定义形式:
class 类名{
const 常量名 = 常量值;
//不可以使用define()来定义!
}
使用形式:
类名::常量名;
--------------------------------------------------------------------------------------
普通属性(实例属性):
定义形式:
class 类名{
var $属性名 = 初始值;
var $属性名; //这个属性没有初始值;
//上述的var 还可以使用public来代替,比如:
public $属性名 = 初始值;
public $属性名; //这个属性没有初始值;
}
使用形式:$对象->属性名;
当做一个变量来看待和使用
$v1 = $对象->属性名;
echo $对象->属性名;
$v2 = $对象->属性名 * 3 + 5; //进行计算
--------------------------------------------------------------------------------------
静态属性:
定义形式:
class 类名{
static $属性名 = 初始值;
static $属性名; //这个属性没有初始值;
}
使用形式:
使用类名和范围解析符(::)来对静态属性进行操作:
类名::$静态属性名; //注意:属性名带$符号
对比1:
常量的使用:类名::常量名;
对比2:
实例属性的使用:对象名->实例属性名; //注意:属性名不带$符号
--------------------------------------------------------------------------------------
普通方法(实例方法)
定义形式:
class 类名{
function 方法名(形参1,形参2,.... ){
//方法体。。。
}
}
调用形式:
$对象名->方法名(实参1,实参2,....);
静态方法
定义形式:
class 类名{
static function 方法名(形参1,形参2,.... ){
//方法体。。。
}
}
调用形式:
类名::方法名(实参1,实参2,....);
--------------------------------------------------------------------------------------
构造方法(_ _construct):
构造方法,是一个特殊的方法:
1,名字是固定的:_ _construct;
2,该方法通常都不要我们自己调用,而是在new一个对象的时候会自动调用。
3,该方法主要的目的是为了在new一个对象的时候,给该对象设置一些“初始值”(初始化工作);
4,构造方法的参数没有规定,通常是根据实际的需要来定义,目的是为了对象属性数据的初始化;
--------------------------------------------------------------------------------------
析构方法(_ _destruct):
说明:
1,析构方法是一个特殊的方法,名字为固定的词:_ _desctruct
2,析构方法是在一个对象被“销毁”的时候会自动被调用的方法——我们无法调用它;
3,析构方法不能带参数(形参),但方法中也可以使用$this这个词,代表“当前对象”;
--------------------------------------------------------------------------------------
继承
--------------------------------------------------------------------------------------
访问控制修饰符
形式:
class 类名{
访问控制修饰符 属性或方法定义;
}
public公共的:在所有位置都可访问(使用)。
protected受保护的:只能再该类内部和该类的子类或父类中访问(使用)。
private私有的:只能在该类内部访问(使用)。
可访问性:在代码中使用这样两种语法形式的“有效性”(合法性):
对象->实例属性或方法;
类::静态属性或方法;
--------------------------------------------------------------------------------------
可访问性如下: 类内部 继承关系类内部 类外部
public Yes Yes Yes
protected Yes Yes No
private Yes No No
--------------------------------------------------------------------------------------
parent代表“父类”
其使用方式为:
parent::属性或方法; //通常是静态属性或静态方法,但有时候可能是实例属性或实例方法;
关键字 含义 使用位置: 使用示例
parent:代表父类(这个类) 肯定在一个方法中 parent::属性或方法;
self: 代表当前其所在的类 肯定在一个方法中 self::静态属性或方法;
$this: 代表调用当前方法的对象 肯定在一个方法中 $this->实例属性或方法;
--------------------------------------------------------------------------------------
构造方法和析构方法调用上级同类方法的问题
1,如果一个类 有 构造方法,则实例化这个类的时候,就 不会 调用父类的构造方法(如果有);
2,如果一个类没有构造方法,则实例化这个类的时候,就会自动调用父类的构造方法(如果有);
3,如果一个类 有 析构方法,则销毁这个类的时候,就 不会 调用父类的析构方法(如果有);
4,如果一个类没有析构方法,则销毁这个类的时候,就会自动调用父类的析构方法(如果有);
5,如果一个类中有构造方法或析构方法,则就可以去“手动”调用父类的同类方法(如果有);
Back to home |
File page
Subscribe |
Register |
Login
| N