面向对象和面向过程基础知识

面向对象和面向过程基础知识

面向对象&面向过程概念:
   面向过程:是解决一个问题的过程。面向过程的最大特点:是由一个一个的函数去解决处理这个问题的一系列过程
   面向对象:是由哪个对象来处理一个问题。面向对象的最大特点,是有一个个具有属性和功能的类,从类中拿到对象,进而处理问题。

【面向对象】

1、什么是类?
把具有相同属性(特征)和方法(行为)的个体放到一个集合中,类是一个抽象的概念
2、什么是对象?
从类中,拿到的具有具体属性值的个体,称为对象。对象是一个具体的个体。
例如:人类,都有姓名、性别、年龄,但是这些属性都不能有具体的值。
张三,是人类中的一个对象!姓名张三、性别男、年龄23,将类的每一个属性具体赋值后,就成了张三这个对象。

3、类和对象的关系?
  类是对象的抽象化!对象是类的具体化!
  类仅仅表明这类对象有哪些属性,但是不能有具体的值,所以类是抽象的。
  而对象,是将类的所有属性赋值后,产生的具体的个体,所有对象是具体的。

类的声明与实例化:

1、如何声明一个类:

 class 类名{

         访问修饰符 $属性[=默认值];
         [访问修饰符] function 方法(){}
  }

2、声明一个类的注意事项:
  ① 类名只能有字母数字下划线组成、开头不能是数字,必须符合大驼峰法则;
  ② 类名必须使用class修饰,类名后面一定不能有();
  ③ 属性必须要带访问修饰符,方法可以不带访问修饰符;

3、实例化对象及对象属性方法的调用?
  $对象名 = new 类名(); //()可以不带

类外部调用属性和方法:
   对 象 名 − > 属 性 名 ; / / 使 用 − > 调 用 属 性 时 , 属 性 名 不 能 带 对象名 -> 属性名; // 使用->调用属性时,属性名不能带 >;//使>
类内部调用属性和方法:
  $this -> 属性名;

构造函数:
1、什么是构造函数?
  构造函数是类中的一个特殊函数,当我们使用new关键字实例化对象时,相当于调用了类的构造函数;
2、构造函数有什么作用?
实例化对象时,自动调用,用于给对象的属性赋初值!
3、构造函数的写法?
① 构造函数名,必须与类同名
[public] function Person($name){
$this -> name = KaTeX parse error: Expected 'EOF', got '}' at position 11: name; }̲ ② 使用魔术方法__…name=""){
$this -> name = $name;
}

4、构造函数注意事项:

① 第一种写法,构造函数名必须与类同名!!!!!!
   ② 如果一个类没有手写构造函数,则系统默认会有一个空参构造,因此可以使用new Person();
   如果我们写了带参数的构造函数,则将不会再有空参构造,也就是不能直接使用new Person(); Person后面的()中的参数列表,必须符合构造函数的要求!!!
  ③ 如果两种构造函数同时存在,将使用__construct。

5、析构函数:__destruct():
析构方法允许在销毁一个类之前执行的一些操作或完成一些功能,比如说关闭文件、释放结果集等
要执行父类的析构方法,必须在子类的析构方法体中手动调用 parent::__destruct() 。
① 析构函数在对象被销毁释放之前自动调用!
② 析构函数不能带有任何参数
③ 析构函数常用于对象使用完以后,释放资源、关闭资源等!

6、魔术方法:
PHP中,给我们提供一系列用__开头的函数,这些函数无需自己手动调用,会在合适的时机自动调用,这类函数称为魔术函数。
例如:function __construct(){} 在类new一个对象时自动调用
function __destruct(){} 在对象被销毁时自动调用
我们要求,除了魔术方法之外,自定义的函数与方法不能使用__开头。

最后,一般对于功能比较复杂的类,我们会单独的写到一个类文件中。
类文件的命名,统一小写,使用“类名小写.class.php”的方式命名。
在其他文件中使用这个类时,可以用include导入这个.class.php文件

封装的基本概念

1、什么是封装?
封装是php面向对象的其中一个特性,将多个可重复使用的函数封装到一个类里面。在使用时直接实例化该类的某一个方法,获得需要的数据
如果是私有的方法和属性值,外部无法访问,具有一定的保护作用。

2、封装的作用?
   第一:重用;
第二:不必关心具体的实现;
第三:面向对象三大特征之一;
第四,具有安全性!
3、实现封装操作?
   ① 方法的封装
    对于一些只在类内部使用的方法,而不像对外部提供使用。那么,这样的方法我们可以使用private进行私有化处理。
    private function formatName(){} //这个方法仅仅能在类内部使用KaTeX parse error: Expected '}', got 'EOF' at end of input: …wName(){       this -> formatName();
}

② 属性的封装+set/get方法  为了控制属性的设置以及读取,可以将属性进行私有化处理,并要求用户通过我们提供的set/get方法进行设置

private a g e ;     f u n c t i o n s e t A g e ( age;    function setAge( age;  functionsetAge(age){
   $this->age = $age;
  }
  function getAge(){
   return $this->age;
  }
$对象 -> getAge();
$对象 -> setAge(12);

③ 属性的封装+魔术方法
   private KaTeX parse error: Expected group after '_' at position 18: …e;    function _̲_get(key){
   return t h i s − > this-> this>key;
   }
function __set( k e y , key, key,value){
t h i s − > this-> this>key=$value;
}
$对象->age; // 访问对象私有属性时,自动调用__get()魔术方法,并且将访问的属性名传给__get()方法;
$对象->age=12; // 设置对象私有属性时,自动调用__set()魔术方法,并且将设置的属性名以及属性值传给__set()方法;

注意:在魔术方法中,可以使用分支结构,判断$key的不同,进行不同操作。

4、关于封装的魔术方法:
① __set( k e y , key, key,value):给类私有属性赋值时自动调用,调用时给方法传递两个参数:需要设置的属性名、属性值;
② __get(KaTeX parse error: Expected group after '_' at position 45: …数:需要读取的属性名; ③ _̲_isset(key):外部使用isset()函数检测私有属性时,自动调用。
   >>> 类外部使用isset();检测私有属性,默认是检测不到的。false
  >>> 所以,我们可以使用__isset();函数,在自动调用时,返回内部检测结果。
  function __isset(KaTeX parse error: Expected '}', got 'EOF' at end of input: … return isset(this->KaTeX parse error: Expected 'EOF', got '}' at position 10: key);   }̲ 当外部使用isset(对象名->私有属性);检测时,将自动调用上述__isset()返回的结果!
④ __unset(KaTeX parse error: Expected group after '_' at position 45: …用;   function _̲_unset(key){
  unset( t h i s − > this-> this>key);
}
当外部使用unset($对象名->私有属性);删除属性时,自动将属性名传给__unset(),并交由这个魔术方法处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值