【编程开发】PHP---⾯向对象教程
编程php语言⾯向对象编程
类:在现实世界中,任何事物都有种类的概念:车
  类是由特征和⾏为构成的。
    特征:都是不动的,从出⼚的时候就已经内置好了(属性)
    ⾏为:⼀种动的状态。(⽅法(函数))
  ⾏为依赖于这些特征,⽽特征只有通过这些⾏为才能施展。
对象调⽤属性、⽅法
<?php
header("Content-Type:text/html; charset=utf-8");
class Persion{
const NAME = "⼩王";
public$name = "⼩明";        //public访问控制符
public$name1 = "⼩红";
public function run($my_nume){
echo$my_nume;
}
}
//对象调⽤属性以及⽅法使⽤->
//对象调⽤属性的时候,直接加属性名,不要加$符
//对象调⽤⽅法的时候,直接写⽅法名就可以了
//调⽤类常量,可以⽤当前对象,加::的形式来调⽤
$p = new Persion();  //返回的是⼀个对象
echo$p->name;
$p->run("⼩蓝");
echo$p::NAME;
echo Persion::NAME;  //也通过直接调⽤当前类加::的形式来调⽤
类常量:const
  const⽤于类成员常量的定义,⼀经定义,不可修改。
  const和define的区别:
    1、const可以在类中使⽤,define不能
    2、const不能在条件语句中定义常量
    ☆ const定义的常量是⼤⼩写敏感,⽽define可以通第三个参数来指定⼤⼩写是否敏感。
构造函数:__construct()
  我们在创建⼀个类的时候有时候需要初始化⼀些操作,这个时候我们需要使⽤初始化函数,在PHP中有两种初始化⽅法:  1、构造函数:__construct() 。注意:构造函数是⾃动运⾏的,在你实例化的时候就⾃动执⾏了。
class MyPc
{
function __construct(){
//初始化操作
}
}
new MyPc();
构造函数怎么传递参数呢?通过在类名实例化的⼩括号⾥传递我们的参数:
class MyPc{
function __construct($name)
{
echo '你好'.$name;
}
}
new MyPc("⼩王");
  2、建⽴⼀个对象⽅法
注意:此时测⽅法名没有⼤⼩写区分,只要与类名⼀致,均会被当成构造函数,在实例化时⾃动调⽤。
class MyPc
{
function MyPc(){    //当⽅法名跟我们的类名⼀致的时候,PHP就会⾃动的把它当成构造函数来使⽤
echo "123";
}
}
new MyPc();
注意:
__construct的优先级⽐对象⽅法⾼,当类中有__construct时必须放在类的开头。
class MyPc{
function __construct($name)
{
//如果⽤__construct⽅法,则必须放在类中的开头
echo '你好'.$name;
}
function MyPc()
{
//此时的MyPc()⽅法就是⼀个普通的⽅法
echo "asd";
}
}
(new MyPc("⼩王"))->MyPc();
//此时要实例化类,则必须传⼊⼀个参数,因为构造函数定义的时候需要⼀个参数,之后由于没有定义⼀个参数来赋值类,所以⽤括号扩起来。
析构函数:__destruct()    了解就好
  能够在对象释放时⾃动被调⽤的⽅法被称为析构函数。
理解: 
  我们可以理解为垃圾回收机制,当对象内部的操作执⾏完毕的时候,__destruct()被调⽤,然后对象所使⽤的内存被释放出来。规则:
  先进先出
$this 关键字
  $this关键字:是⽤来访问当前对象中的对象属性和对象⽅法的系统变量
理解:
  我们可以理解为$this是在对象中特殊的⼀种使⽤构造函数和变量的⽅法。
  注意:$this仅能在当前对象中使⽤
class Pc{
public$name = "⼩马";
function computer($name='⼩明',$c='')
{
$this->name = $name;
//可以动态的修改类的属性,第⼀个name不加$,表⽰类的属性
//第⼆个是传⼊的参数
echo$this->name;
//在类的⾥⾯,调⽤其他属性和⽅法⽤$this
//⽤$this加->调⽤属性和⽅法
//注意,这⾥的name不⽤加$符号
}
}
/
/类不被实例化,是不会展⽰类⾥⾯所有功能的。
$p = new Pc();
$p->computer();
//这⾥没有传递参数,则定义时必须给形参⼀个默认值
类成员的访问控制
访问控制符:
  就是把⼀些相关的属性和⾏为隐藏起来,从⽽得到保护和安全。
public:
  表⽰全局,在类的内部和外部⼦类都可以访问。
protected:
  表⽰受保护的,只有本类或⼦类或⽗类中使⽤。
private:
  表⽰私有,只有本类内部可以使⽤。
☆类,是要被实例化返回⼀个对象的,在对象访问的时候,访问属性和⽅法只能⽤public来访问,不能⽤其他两个。即⽆法⽤->来访问proteced和private的属性和⽅法。
class Pc{
public$name = "⼩马";
protected$age = '18';
//受保护的,在本类中可以使⽤$this->来调⽤,但是在外部实例化的时候是不能调⽤的
//可继承
private$city = '上海';
public function test()
{
return$this->name."在".$this->city;
//⽅法最好有返回值热,retur和echo都可以,建议⽤return
//$this 调⽤本类的属性和⽅法
}
}
//类的外⾯想要调⽤属性,要先实例化该类
$p = new Pc();
/*echo $p->name;    //正常调⽤
echo $p->age;    //Fatal error: Cannot access protected property
echo $p->city;    //Fatal error: Cannot access private property */
echo$p->test();
类的⾃动加载:__autoload()
  使⽤"__"开头的基本上都是系统的构造函数
作⽤: 
  快速取得对象名称并⾃动载⼊进当前页⾯,当实例化类的时候,会⾃动获取类的名称,并在当前⽂件中及当前⽂件⽬录下⾃动加载<?php
header("Content-Type:text/html; charset=utf-8");
//类的⾃动加载
//⾃动加载函数,可以放到类的外⾯,执⾏该⽂件的时候会⾃动执⾏
function __autoload($class_name){
include($class_name.".php");
//如果本⽂件中没有这个类,那么会在本⽂件⽬录下⾃动加载以该类名称命名的⽂件
}
$p = new Pc();
echo$p->name;
#$p = new MyPc();
//如果本⽂件中没有这个类,那么会在本⽂件⽬录下⾃动加载以该类名称命名的⽂件
class Pc
{
public$name = "adf";
}
类的继承:extends
  PHP类的继承,我们可以理解成共享被继承类的内容。PHP中使⽤extends单⼀继承的⽅法,请切记:(⾮C++多继承)被继承的类我们叫做⽗类(基类),继承者称为⼦类(派⽣类)。
PHP继承的规则:
  可多重继承,但是不能同时继承多个。可避免属性和⽅法的重名。
关键字:parent
  ⼦类(派⽣类)继承⽗类(基类)。⼦类想访问跟⼦类⽅法同名的⽗类的时候,并且⼦类的⽅法也不想被⽅法重载的时候。这时候使⽤parent。
  在类中定义⽅法的时候,如果不写访问控制符,那么默认是public属性。
//基类、⽗类
class A
{
function test(){
echo "⽗类";
}
}
class B extends A
{
function test()
{
#echo "⼦类";
parent::test();
}
}
$p = new B();
$p->test();
//如果⼦类中的⽅法名与⽗类中的⽅法名重复,那么⼦类的⽅法会覆盖⽗类中的⽅法。(⽅法的重载)
当⼦类和⽗类的⽅法重名的时候,由于直接调⽤⽅法会默认调⽤⼦类的⽅法,因此我们使⽤parent关键字来调⽤⽗类中的⽅法。(在⼦类中使⽤)
⽅法重载
  基类⽅法重载:
    因为属于向下继承的原理,基类不能使⽤派⽣类⾥的内容,这时基类的⼀些⽅法不能完成我们的⼀些派⽣类的功能。
    我们就可以进⾏⽅法重载,避免新建⽅法带来的混乱。
  理解:⽅法重载我们也可以理解为⽅法覆盖,在派⽣类中使⽤与基类⽅法重名的⽅法名来执⾏重载。
例⼦与上⾯parent⼀样。
范围操作符: "::"
  注意:这个符号⽤于类中(⽽不是对象中)访问成员,对象访问成员使⽤的是"->"符号。
  使⽤场景:
    1、在使⽤类的时候,⽗类和⼦类具有相同的属性和⽅法时,利⽤它可以避免混淆。
    2、在类外的时候,没有创建对象的情况下使⽤该操作符访问类的成员。
  记住:
    在多数情况下,我们使⽤范围解析操作符是为了访问被重写的⽅法。我们也可以⽤其访问静态和常数成员。
//基类、⽗类
class A
{
const Name='⼩明';
public static function test()
{
echo "静态⽅法";
}
public function aa()
{
}
}
//调取类常量
echo A::Name;
A::test();
/
/加::来调⽤⼀些静态的属性和⽅法
A::aa();
//不可以调⽤普通的⽅法名,Non-static method A::aa() should not be called statically
注意:不允许直接调⽤普通⽅法。
静态成员的作⽤
  静态:只要在成员前加上关键字static,该变量就成为静态成员了。
  1、静态变量属于类,⽽不属于类的某个实例。这个变量对所有实例都有效。
  2、声明为static的类、函数和变量将不能引⽤实例⽅法或变量。
  3、静态变量和⽅法必须通过类名进⾏引⽤⽽不能通过实例对象引⽤。
//基类、⽗类
class A
{
public static function test()
{
echo "这是⼀个普通⽅法";
}
}
//调⽤静态的,⽆论是⽅法还是属性,都可以⽤::
A::test();
匿名类    (了解即可,PHP7新加⼊的)
  PHP7⽀持通过new class来实例化⼀个匿名类,这可以⽤来替代⼀些“⽤后即焚”的完整类定义。
trait技术
  Traits是⼀种为类似PHP的单继承语⾔⽽准备的代码复⽤机制。Trait为了减少单继承语⾔的限制,使开发⼈员能够⾃由地在不同层次结构内独⽴的类中复⽤⽅法集。
  作⽤:我们在没有增加代码复杂的情况下,实现了代码的复⽤。 

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。