php 类 属性和方法的关系

  一 . 属性关系

    1 .  public属性:在类的外部和内部都可以调用  被继承能够重构

    2 .  protected属性:在类的内部可以调用外部不能可以被继承并且重构

    3 .  private属性:只有在类的内部调用 不能被继承

    4 .  static属性:类的内部和外部都能调用  内部调用方法(self::属性变量) 外部调用方法(类名::属性变量)

  二 . 方法关系

    1 . public方法:在类的外部和内部都可以调用 可以被继承

    2 . protected方法:在类的内部可以调用外部不能 可以被继承

    3 .  private方法:只有在类的内部调用 不可以被继承

    4 . static方法:外部内部都可以调用  内部调用方法($this->方法名) 外部调用发法(类名::方法名)

  三 . final 说明

    1 . final---用于类、方法前。

    2 . final类---不可被继承。

      3 . final方法---不可被覆盖。

   四 . 下面是自己写的测试demo

<?php

    /**
     * DEFINE MyClass1
     * Date 2019-3-14
     * Author QQ28281633
     */
    class MyClass1
    {
        //声明一个公共的变量
        public $public = ‘Public‘;
        //声明一个受保护的变量
        protected $protected = ‘Protected‘;
        //声明一个私有的变量
        private $private = ‘Private‘;
        function printAll()
        {
            echo $this->public;
            echo $this->protected;
            echo $this->private;
        }
    }

    //实例化对象
    $obj = new MyClass1();
    echo $obj->public;     //正常输出: Public
    echo $obj->protected;  //报错:Cannot access protected property
    echo $obj->private;    //报错:Cannot access protected property
    $obj->printAll();      //正常输出 Public Protected Private

    /**
     * DEFINE MyClass2
     * Date 2019-3-14
     * Author QQ28281633
     */

    class MyClass2 extends MyClass1{
        // 可以对 public 和 protected 进行重定义,但 private 而不能
        public $public = ‘Public2‘;
        protected $protected = ‘Protected2‘;
        static $a = 1;

        function printAll(){
            echo $this->public;
            echo $this->protected;
            echo $this->private;
        }
    }

    $obj2 = new MyClass2();

    echo $obj2->public; // 这行能被正常执行
    echo $obj2->private; // 未定义 private
    echo $obj2->protected; // 这行会产生一个致命错误
    $obj2->printAll(); // 输出 Public Protected2 和 Undefined

    /**
     *DEFINE MyClass3
     * 类中方法的访问控制
     */

    class MyClass3{
        //声明一个共有的构造函数
        public function __construct(){}

        //声明一个共有的方法
        public function myPublic(){
            return ‘myPublic‘;
        }

        //声明一个受保护的方法
        protected function myProtected(){
            return ‘myProtected‘;
        }

        //声明一个私有的方法
        private function myPrivate(){
            return ‘myPrivate‘;
        }

        //检查输出所有方法
        public function printAll(){
            echo $this->myPublic();
            echo $this->myProtected();
            echo $this->myPrivate();
        }
    }

    $obj3 = new MyClass3;
    echo $obj3->myPublic();     //正常执行
    echo $obj3->myProtected(); //报错
    echo $obj3->myPrivate();  //报错
    $obj3->printAll(); //三个方法在类的内部均可正常执行

    class Tests
    {
        public function test() {
            $this->testPrivate();
            $this->testPublic();
            $this->testStatic();
        }

        public function testPublic() {
            echo "1";
        }

        private function testPrivate() {
            echo "2";
        }

        public static function testStatic(){
            echo 3;
        }
    }

    $myFoo = new Tests();
    Tests::testStatic();
    $myFoo->test();

    /**
     * Class Math
     *  final 解释
     */
    class Math
    {
        public final function max(){
           echo 1;
        }
    }
    //声明类SuperMath 继承自 Math类
    class SuperMath extends Math
    {
        public final function max(){
            echo 2;
        }
    }
    //执行会出错,final方法不能被重写。

?>


原文地址:https://www.cnblogs.com/vinzen/p/10534552.html

时间: 2024-08-02 15:35:19

php 类 属性和方法的关系的相关文章

python干货-类属性和方法,类的方法重写

类属性与方法 类的私有属性 __private_attrs: 两个下划线开头,表明为私有,外部不可用,内部使用时self.__private_attrs. 类的方法 在类的内部,使用 def 关键字来定义一个方法,类方法必须包含参数 self,且为第一个参数.self的名称也可自己取,如使用this,但是建议还是用self为好. 类的私有方法 __private_method: 两个下划线开头,为私有方法,只能在类的内部调用 ,不能在类的外部调用.self.__private_methods.

php 定义类属性和方法的public protected private 修饰词的区别

这三个词在定义类的属性和方法时使用,其最大的区别在与他们作用域不同 public :全局使用,不仅是本类,其子类,创建的对象都可以使用,甚至子类的子类由于继承关系,也可以使用. protected:本类和其子类使用,如果后续有继承的话, private : 仅限本类使用 class ClassA { public $a = 1; protected $b = 2; private $c = 3; public function share() { echo 'a='.$this->a."\

Python 面向对象编程基础——初始化实例、类属性、方法

#1.初始化实例化属性.#可接受任意关键字参数,并把他们都作为属性赋值给实例.使用**kw,除了可以直接使用self.name = 'xxx'设置一个属性外,还可以通过setattr(self, 'name', 'xxx')设置属性.class Person(object):    def __init__(self, name, gender, **kw):        self.name = name        self.gender = gender        for k,v i

python类的使用(类定义,构造器,类属性,方法)

注:这里只描述使用方法,具体类的概念长篇大论就不要为难我这个懒人了. 总之一句话编程语言只是一个工具,会用就行,好用就行.打破砂锅问到底,我觉得有必要研究一下C,汇编,电子链路等. 1 class cltdy: #定义类,并起一个名字 2 n = 1000 #类属性,类内的变量 3 def __init__(self,name,age,profession='IT民工'): #构造函数,类接收外部传入参数全靠构造函数 4 self.name = name 5 self.age = age 6 s

c# 类属性和方法

属性 public 类字段 就相当于c#里面暴露给外面的属性 类似nodejs的 module.exports 但是属性又不同于普通的字段,属性只是外部包装字段 没有自己的任何含量 类似退换后的方法. 还是需要内部字段来设置. private 类字段 就相当于类内部使用的字段.其实可以把属性看做私有变量的访问器 1.属性的作用:保护字段,对字段取值与赋值进行限定 2.属性的使用: _name(属性名) public [对应字段类型] 属性名Name { get{return _name;} se

PHP DOMDocument操作 XML类 属性、方法

属性: Attributes 存储节点的属性列表(只读) childNodes 存储节点的子节点列表(只读) dataType 返回此节点的数据类型 Definition 以DTD或XML模式给出的节点的定义(只读) Doctype 指定文档类型节点(只读) documentElement 返回文档的根元素(可读写) firstChild 返回当前节点的第一个子节点(只读) Implementation 返回XMLDOMImplementation对象 lastChild 返回当前节点最后一个子

Objective-C 类属性和方法的访问权限

OC中提供了4种访问权限,@private, @public, @protected这三种和其他的C++, Java是一样的,@package这个访问权限并不是Java里的包访问权限,OC中没有包的概念,这个是框架级的访问权限,在当前的framework的类中视为@protected,在框架以外的类中访问被视为@private. // // Goods.h // 05_Self // // Created by apple on 14-11-10. // Copyright (c) 2014年

转载:js 创建对象、属性、方法

1,自定义对象. 根据JS的对象扩展机制,用户可以自定义JS对象,这与Java语言有类似的地方. 与自定义对象相对应的是JS标准对象,例如Date.Array.Math等等. 2,原型(prototype) 在JS中,这是一种创建对象属性和方法的方式,通过prototype可以为对象添加新的属性和方法. 通过prototype我们可以为JS标准对象添加新的属性和方法,例如对于String对象,我们可以为其添加一个新的方法trim(). 与严格的编程语言(例如Java)不同,我们可以在运行期间为J

static 关键字 静态属性与方法 -&gt; :: self $this 区别

1.声明类属性或方法为静态,就可以不实例化类而直接访问.静态属性不能通过一个类已实例化的对象来访问(但静态方法可以). 2.由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用. 3.静态属性不可以由对象通过 -> 操作符来访问. 4.用静态方式调用一个非静态方法会导致一个 E_STRICT 级别的错误. 5.就像其它所有的 PHP 静态变量一样,静态属性只能被初始化为文字或常量,不能使用表达式.所以可以把静态属性初始化为整数或数组,但不能初始化为另一个变量或函数返回值