类成员访问控制:

1、public 默认的,任何地方都可以访问,类内,类外,子类中

2、protected 受保护的,对外是封闭的,但是类内部和子类可以访问

3、private  私有的,仅限于本类中访问

静态属性和静态方法

static关键字声明了一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也成为'类属性'或类方法。

静态方法的特点

static方法是累涨的一个成员方法,属于整个类,即是不创建任何对象也可以直接使用。静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁。

静态属性的特点

1.static的属性,在内存中只有一份,为所有的实例共用。
2.使用self:: 关键字访问当前类的静态成员。
3.一个类的所有实例,共用类中的静态属性。
4.在内存中即使有多个实例,静态的属性也只有一份。

使用静态方法

1.在类外调用静态方法时: 使用 类名::静态方法名
2.在类中调用其他静态方法时 :使用self::静态方法名,不能使用this(this(this指的是实例化类后的具体对象)

其他

静态属性不需要实例化就可以直接使用,在对象还没有创建时就可以直接使用。
在静态方法中不能使用this−>调用
当一个类中有非静态方法被self:: 调用时,系统会自动将这个方法转换为静态方法。

类外部调用静态属性和静态方法

<?php

namespace _1010;
//静态属性和静态方法,外部调用
class Person
{
public $name = 'tom';//这是非静态属性
public static $age = 22;//静态属性 public static function intro()//这是静态方法
{
echo '现在调用的是静态方法';
}
}
echo Person::$age,'<br>';//类外部调用静态属性
echo Person::intro();//类外部调用静态方法

类内部调用静态属性

<?php
//内部调用静态属性
class Person
{
public $name = 'tom';
public static $age = 24; public function intro()
{
echo 'my age is '.self::$age;
}
//设置静态属性
public function setAge($age)
{
self::$age = $age;
}
//获取静态属性
public function getAge()
{
echo '我现在的 age 是'.self::$age;
}
}
//实例化对象
$p = new Person();
$p->intro();
$p->setAge(66);
$p->getAge();

 类内部调用静态方法

PHP中类成员的访问控制的更多相关文章

  1. C++中类成员的访问控制

    结论 首先给出结论,请看下图,看图说话最容易理解了. 类眼中的自己 类中定义的所有成员,不论是以public, protected还是private修饰,对类自身而言,它们都是可见的. 对象眼中的类 ...

  2. Delphi XE中类成员的访问权限(新增了strict private和strict protected,还有automated)

    Delphi XE中类成员的访问权限共提供了6个关键词来用于限定访问权限:public.private.protected.published.automated strict private . s ...

  3. 鸡啄米:C++编程之十三学习之类与对象,类的声明,成员的访问控制

    1. 本次学习鸡啄米课程第13篇,把比较重要的学习记录下来,以敦促自己更好的学习.推荐他们的网址学习:http://www.jizhuomi.com/school/c/97.html 2. 在面向过程 ...

  4. this、static、main方法、静态代码块、final关键字、Runtime类、Cloneable类、类成员的访问控制权限、异常体系

    this表示当前对象,用在方法内部,当某对象调用该方法时,该方法中的this就代表调用该方法的对象: static关键字: 修饰类属性后,该属性就成为该类所有实例的公共属性,修改该属性值,所有的实例的 ...

  5. Java中类成员变量初始化顺序

    一. 定义处默认初始化vs构造函数中初始化 java中类成员变量支持在声明处初始化,也可以在构造函数中初始化,那么这两者有什么区别呢?看下面例子 public class FieldsInit { p ...

  6. C++中类成员变量在初始化列表中的初始化顺序

    引子:我们知道,C++中类成员变量的初始化顺序与其在类中的声明顺序是有关的. 先看代码: class TestClass1 { public: TestClass1() { cout << ...

  7. C++中类成员使用前需要初始化的重要性

    今天写程序的时候,创建了一个结构体: struct BufferObj { char* buf; int bufLen; SOCKADDR_STORAGE addr; int addrLen; str ...

  8. C++中类成员函数作为回调函数

    注:与tr1::function对象结合使用,能获得更好的效果,详情见http://blog.csdn.net/this_capslock/article/details/38564719 回调函数是 ...

  9. C#中类成员的执行顺序

    先进行细分: 类的成员分为:字段.属性.方法.构造方法 成员的修饰符:静态成员.实例成员 层次结构:父类.子类 先不考虑继承关系,执行顺序为: 静态字段静态构造方法实例字段实例构造方法属性和方法是在调 ...

随机推荐

  1. 做reacat小项目的过程(我感觉适合那种刚刚接触react感觉很深奥的亲们,通过这个可以建立一个很垃圾的项目,入门吧,往深处就需要自己再看了)

    需求:做一个react框架的前端框架(包括路由,请求后端等),大概就是做一个左边导航右边显示组件页面的东西,ui为material-ui 环境: 软件:vscode 包含的知识点:使用路由来导航,使用 ...

  2. 配置Jupyter Notebook

    配置Jupyter Notebook 1 修改Jupyter Notebook的工作目录 Jupyter默认打开的是用户目录,使用如下步骤自行修改: CMD生成Jupyter配置文件: (python ...

  3. Scrapy 教程(11)-API启动爬虫

    scarpy 不仅提供了 scrapy crawl spider 命令来启动爬虫,还提供了一种利用 API 编写脚本 来启动爬虫的方法. scrapy 基于 twisted 异步网络库构建的,因此需要 ...

  4. Docker网络原则入门:EXPOSE,-p,-P,-link

    如果你已经构建了一些多容器的应用程序,那么肯定需要定义一些网络规则来设置容器间的通信.有多种方式可以实现:可以通过--expose参数在运行时暴露端口,或者在Dockerfile里使用EXPOSE指令 ...

  5. mysql 对返回的值是null进行判断和重新赋值

    SELECT IFNULL(sum(c.tax_data),) ,IFNULL(SUM(c.fiscal_ret),) FROM corp_tax c WHERE c.industry_id = 使用 ...

  6. 记一次ArrayList产生的线上OOM问题

    前言:本以为(OutOfMemoryError)OOM问题会离我们很远,但在一次生产上线灰度的过程中就出现了Java.Lang.OutOfMemoryError:Java heap space异常,通 ...

  7. tcp流式传输和udp数据报传输

    所有的书上都说, tcp是流式传输, 这是什么意思? 假设A给B通过TCP发了200字节, 然后又发了300字节, 此时B调用recv(设置预期接受1000个字节), 那么请问B实际接受到多少字节? ...

  8. WindowsForm客户端自动更新逻辑

    启动客户端的时候,单独开一个线程,该线程主要是判断指定服务器上的更新包和本地使用的客户端是否一致,是否需要更新,不需要更新,则退出,需要更新则从服务端的下载更新包,然后提示用户是否更新,点击更新,启动 ...

  9. [i.MX]飞思卡尔IMX6处理器的GPIO-IOMUX_PAD说明

    在linux或android系统中,假如我们要配置飞思卡尔IMX6处理器的GPIO管脚,比如是GPIO_19这个管脚,那么要像这样: #define MX6Q_PAD_GPIO_19__GPIO_4_ ...

  10. CV3——学习笔记-实战项目(上):如何搭建和训练一个深度学习网络

    http://www.mooc.ai/course/353/learn?lessonid=2289&groupId=0#lesson/2289 1.AlexNet, VGGNet, Googl ...