类常量的定义和静态常量的定义和调用

<?php

//定义常量
define(‘MYNUM‘, 100);

if(!defined(‘MYNUM‘)){
define(‘MYNUM‘, 200);
}
//echo MYNUM;

class MyObject{
//定义类中的常量
const NUM = 10000;

//定义类中的静态变量
static $num = 100;

protected $name;

public function __construct($name)
{
$this->name = $name;
}

function desc(){
echo $this->name.‘--‘;
// $this只能访问类中的变量和函数
// echo $this->NUM;
//在类的内部访问类中的常量只能使用self关键字
echo self::NUM.‘--‘;
//在类的内部访问类中的静态变量只能使用self关键字
echo self::$num;

//非静态的函数可以直接调用静态函数方法
self::desc2();
}

static function desc2(){
// 伪变量 $this 在静态方法中不可用
// 因为调用静态函数方法不需要创建类的实例化对象
// $this->desc();

echo ‘====调用了类的静态函数方法====‘;
}

}

$test = new MyObject(‘李四‘);
$test->desc();
echo ‘<br><br>‘;
// 如果需要在类的外部来直接访问类中的常量,那么直接使用类名
echo ‘类的外部范围类中的常量:‘.MyObject::NUM.‘--‘.MyObject::$num;
echo ‘<br><br>‘;
// 也可以使用该类的实例化的对象来访问类中的常量
echo $test::NUM;
// 从PHP5.3.0开始才能使用下面的访问方式
echo $test::$num;
echo ‘<br><br>‘;
$test::$num = 200;
echo ‘改变后的静态变量:‘.$test::$num;

echo ‘<br><br>‘;
//静态变量比较特殊,它是被放置在计算机内存的静态区当中
// 静态变量只要调用了该类就会被创建
// 且对于一个类来说,每个静态变量只会在内存中保持一个
$a = new MyObject(‘哈哈‘);
echo $a::$num;
echo ‘<br>‘;

echo ‘<br><br>‘;
echo ‘静态方法的外部访问:‘;
// 使用类名+范围解析操作符+静态函数方法名
MyObject::desc2();
$a->desc2(); // 这样的方式来访问静态资源,不推荐
$a::desc2();

时间: 2024-09-28 20:58:52

类常量的定义和静态常量的定义和调用的相关文章

关于类中的引用、常量、静态常量的初始化

不过 下面所说的在新的 c++11中,已经有所改变. 比如程序中: static const double csd2 = 99.8; // error: 只有静态常量整型数据成员才可以在类中初始化已经可有在类中初始化了 关于这点,可以参考 这个博客 :http://blog.csdn.net/fjb2080/article/details/7527468 如下内容为摘抄自博客,由于几经整理,已经没有记录博客地址了,特此说明: 这一部分待学习:C++11 FAQ中文版:类成员的内部初始化 http

基本数据类型的常量池与String类型常量池解析

抛出样例: Integer a1  = new Integer(123);        Integer a2  = new Integer(123);        System.out.println(a1 == a2);   //false  因为只要遇到new关键词,肯定会在堆里面重新分配空间给实例对象,所以两个地址肯定不同                a1  = 123;        a2  = 123;        System.out.println(a1 == a2); 

C++类中常量数据成员和静态数据成员初始化

常量数据成员初始化原则: 在每一个构造函数的初始化列表中初始化 静态数据成员初始化原则: 类内声明,类外初始化(因为它是属于类的,不能每构造一个对象就初始化一次) // test_max.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include <iostream> #include <vector> using namespace std; class A { public: A(int i):a(0) {} A():

关于“只有静态常量整型数据成员才可以在类中初始化”

关于“只有静态常量整型数据成员才可以在类中初始化” 关于类中的静态成员变量, 在类中只能声明,不能定义注意在类的内部只是声明,不是定义 类中的静态变量是属于类的,不属于某个对象!不能在定义对象时对变量初始化!就时不能用构造函数来初始化!而且使用时应加上类名,而不是对象.例如: class A{ static int x; static int y; } int A::x=1; int A::y=2;//这样初始化! int main(){ cout<<A::x<<endl; cou

Cocos2d-x 3.1.1 学习日志3--C++ 初始化类的常量数据成员、静态数据成员、常量静态数据成员

有关const成员.static成员.const static成员的初始化: 1.const成员:只能在构造函数后的初始化列表中初始化 2.static成员:初始化在类外,且不加static修饰 3.const static成员:类只有唯一一份拷贝,且数值不能改变.因此,可以在类中声明处初始化,也可以像static在类外初始化 #include <iostream> using std::cout; using std::endl; class base { public: base(int

Cocos2d-x 3.1.1 学习日志2--error:只有静态常量整型数据成员才可以在类中初始化

今天遇到比较低端的一个问题,就是成员的初始化问题,编译器也无法验证,不同的编译器有些能过有些不能过,我也不知道为什么,总是我们以vs为准吧,以为我们用的环境就是它,话不多说,解决方案如下: 在类中    static const double PI=3.1416; error:只有静态常量整型数据成员才可以在类中初始化 常整型静态数据成员可以在类中直接初始化,而常实型静态数据成员不可以 class circle { int a; // 普通变量,不能在类中初始化 static int b; //

静态常量static和方法重载

静态常量思维导图 有时在处理问题时,会需要两个类在同一个内存区域共享一个数据.这时没有必要在两个类中同时创建同一个常量,因为这样系统会将这两个不在同一个类中定义的常量分配到不同的内存空间中.可以将这个常量设置为静态的. 被声明为static的变量.常量和方法被称为静态成员.静态成员是属于类所有的,区别于个别对象,可以在本类或其他类使用类名和“.”运算符调用静态成员. 语法格式: 类名.静态类成员 注意: 虽然静态成员也可以使用“对象.静态成员”的形式进行调用,但这样的形式通常不被鼓励使用,因为这

1.封装,构造,重载,静态常量

1.对象:用来描述客观事务的一个实体 2.类:拥有相同属性和方法的对象一组“集合” 一.封装 1.隐藏一个类的属性.通过特定的方法访问! 2.将一个类的某一些信息隐藏在该类的内部,不允许外部程序直接访问,而是通过该类提供的方法对隐藏信息的操作.访问 特点: 隐藏类的实现细节. 通过特定的方法访问数据. 方便加入控制语句.保证数据的真实性 后期的修改 步骤流程: 1.修改属性的访问权限.用来控制对属性的访问 2.将属性私有.创建set.get方法!用于对属性的访问! 3.在set.get方法中加入

java基础知识回顾之---java String final类 容易混淆的java String常量池内存分析

/** *   栈(Stack) :存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放  在常量池中). 堆(heap):存放所有new出来的对象. *   静态存储:存放静态成员(static定义的). 常量池(constant pool):在堆中分配出来的一块存储区域,存放储显式的String常量和基本类型常量(float.int等).另外,可以存储不经常改变的东西 *                       p