PHP从零开始-笔记-面向对象编程的概念

面向对象变成的概念

 

需要一一种不同的方式来考虑如何构造应用程序。通过对象可以在对应用程序所处理的显示任务、过程和思想进行编码是,实施更贴切的建模。OOP方法并不是将应用程序考虑成一个将大量数据从一个函数传递给下一个函数的控制线程,而是允许将应用程序建模成一组相互协作的对象,并且这些对象可以独立的处理某些活动。

吐槽:和js挺像的

 

OPP的优点

 

可以轻松地将单个的业务需求转换为单个的代码模块。

代码重用

类的模块化

吐槽:以后问OPP的优点就这样了

 

opp的组成

类(class)一个对象的“蓝本”,包含定义属性方法的实际代码

对象(object)某个类的运行实例,包含应用程序运行所需要的所有内容数据状态信息

继承(inheritance)可以定义一种类型类为不同类型类的子类型能力(类似于正方形是一种矩形)

多态(polymorphism)允许一个类定义为多个类范畴的成员(例如,轿车是“有引擎的食物”以及“有轮子的事物”)

接口(interface)是指这样一种做法:设定对象能够做什么,而不具体定义这些功能(如:狗和人都是“可以行走的事物”,但是行走的方式有很大的不同)

封装(encapsulation)对象就起内部数据的访问进行保护的能力

 

吐槽:背熟吧,骚年

 

然后下面开始撸代码了

 创建类

<?php
    class Demo{
        
        function sayHello($name){
            print"Hello $name";            
        }    
    }
?>

 添加方法

<?php
    require_once('class.demo.php');
    $objDemo=new Demo();
    $objDemo->sayHello('white')
    
?>

 

 

添加属性

<?php
    class Demo{
        public $name;
        function sayHello(){
            print "Hello $this->name!";            
        }    
    }
?>
复制代码
<?php
    require_once('class.demo.php');
    $objDemo=new Demo();
    $objDemo->name = 'white';
    
    $obj1Demo=new Demo();
    $obj1Demo->name = 'black';
    $objDemo->sayHello();
    $obj1Demo->sayHello();
?>
复制代码

 保护对成员变量的访问

可以将name属性的值设置为任意所需的数据-包括对象、整数数组、文件句柄或任何其他没有意义的值。但是,并不能再设置name属性时执行任何形式的数据验证或更新任何其他的值。

为了解决这个问题,必须以get[property]和set[property name]的函数形式来实现属性。这些函数称为存取器方法

复制代码
<?php
    class Demo{
        private $_name;
        public function sayHello(){
            print "Hello" . $this->getName() . "!";            
        }    
        public function getName(){
            return $this->_name;            
        }
        public function setName($name){
            if(!is_string($name) || strlen($name)==0){
                throw new Exception("Invalid name value!");    
            }        
            $this->_name=$name;
        }
    }
?>
复制代码

 

<?php
    require_once('class.demo.php');
    $objDemo=new Demo();
    $objDemo->setName('white');
    $objDemo->sayHello();
    $objDemo->setName(37);
?>

name属性的成员访问级别由Public变成private,并且怎家了一个下划线作为前缀。下划线是建议的命名约定,表明私有的成员变量和函数;

私有的内部成员变量不能从类的外部访问。由于不能直接访问这些变量,因此必须要getName()和setName()存取器方法获得这些信息,从而确保类可以在允许设置值之前检查该值。。。

成员变量或方法可以有3个不同级别的可见性:公有的、私有的和受保护的。

公有成员可以任意的代码访问。

私有成员只有类自身可以访问。这些成员通常用于类的内部处理买并且可能诸如注入某个数据库连接句柄活配置信息之类的内容。

受保护的成员可以由类自身以及从该类继承的类使用

 

初始化对象

对于许多将要创建的类,需要在初次实例化该类的对象时执行一些特殊的设置。例如,可能需要从数据库中获取某些信息,或者是初始化某些属性值。通过创建一个称为构造函数的特殊方法可以执行实例化对象所需要的任何活动,改方法在PHP中是通过名为_construct()的函数来实现的。在实例化对象时,PHP将自动调用这个特殊的函数

复制代码
<?php
    class Demo{
        private $_name;
        public function _construct($name){
          $this->name = $name;            
        }
        function sayHello(){
            print "Hello $this->name!";            
        }    
        
        
    }
?>
复制代码

 

<?php
    require_once('class.demo.php');
    $objDemo=new Demo();
    $objDemo->_construct('white');
    $objDemo->sayHello();
?>

 

posted @   一点点白  阅读(697)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示