PHP之类与对象
const与define的区别
const是用于类成员常量的定义了,定义之后不可改,而define我们定义的是全局常量了, 这样我们在其它地方访问但不能改变了,具体还有一些细节我们下面给各位列出来吧
注意:define不能定义在类中,而const必须定义在类中,并且const必须通过类名::变量名来进行访问
- const用于类成员变量定义,一旦定义且不能改变其值。define定义全局常量,在任何地方都可以访问。
- define不能在类中定义而const可以。
const不能在条件语句中定义常量
const采用一个普通的常量名称,define可以采用表达式作为名称。
- const只能接受静态的标量,而define可以采用任何表达式。
- const 总是大小写敏感,然而define()可以通过第三个参数来定义大小写不敏感的常量
- 使用const简单易读,它本身是一个语言结构,而define是一个方法,用const定义在编译时比define快很多。
对象中成员的访问
访问对象的成员通过对象的引用来访问:
例如:
对成员属性的访问包括赋值操作和获取成员属性的操作。
访问对象中的成员和访问数组中的元素类似。只能通过对象的引用来访问对象中的每个成员。
$引用名 = new 类名称([参数数列表]); //对象实例化格式
$引用名 -> 成员属性 = 值; //对成员属性赋值的操作
$echo $引用名 -> 成员属性; //获取成员属性的值
$引用名 -> 成员方法; //访问对象中的成员方法
如果对象中的成员不是静态的那么,“对象引用名->属性”或“对象引用名->方法”是唯一的访问形式。
特殊的对象引用”$this”
不管是在对象的外部还是在对象的内部,访问对象中的成员都必须使用对象的引用变量。
但对象创建完成以后,对象的引用名称无法在对象的方法中找到。
如果在对象的方法中再使用new关键字创建一个对象则是另一个对象,调用的成员也是另一个新创建对象的成员。
对象一旦被创建,在对象中的每个成员方法里面都会存在一个特殊的对象引用“
this”。成员方法属于哪个对象,
this引用就代表哪个对象,专门用来完成对象内部成员之间的访问。
不管是在对象内部使用$this访问自己对象内部的成员,还是在对象外部通过对象的引用名称访问对象中的成员。都需要使用特殊的运算符”->”
header("Content-type:text/html;charset=utf-8");
class Person{
public $name;
public $sex;
public $age;
function say(){
echo"我的名字:".$this->name." 性别:".$this->sex." 年龄".$this->age;
}
function run(){
echo$this->name."在走路<br>";
}
}
$a =new Person();
$a -> name="jack";
$a -> sex = 'man';
$a -> age = 15;
$a -> say();
$a -> run();
PHP类的静态(static)方法和静态(static)变量使用介绍
在php中,访问类的方法/变量有两种方法:
创建对象 object=newClass(),然后使用”−>”调用: object->attribute/function,前提是该变量/方法可访问。
直接调用类方法/变量:class::attribute/function,无论是静态/非静态都可以。但是有前提条件:
- 如果是变量,需要该变量可访问。 - 如果是方法,除了该方法可访问外,还需要满足: - 如果是静态方法,没有特殊条件; - 如果是非静态方法,需要改方法中没有使用$this,即没有调用非静态的变量/方法,当然,调用静态的变量/方法没有问题。
然后我们再看一下使用$object->… 和使用class::… 都有什么区别:
- 使用$object->… ,需要执行构造函数创建对象;
- 使用class::… 调用静态方法/变量,不需要执行构造函数创建对象;
- 使用class::… 调用非静态方法/变量,也不需要执行构造函数创建对象。
然后奇怪的地方就出来了,既然2和3都一样,那静态方法/变量存在还有什么意义呢?
差异还是显然存在的,如下:
- 静态变量
静态成员只保留一个变量值,而这个变量值对所有的实例都是有效,也就是说,所有的实例共享这个成员。
- 静态方法
静态方法可以直接使用class::… 来调用,而非静态方法需要满足一定限制条件才能使用class::.. 的方法调用
header("Content-type:text/html;charset=utf-8");
class Person{
static $name;
static $sex;
static $age;
function say(){
echo"我的名字:".self:: $name." 性别:".self:: $sex." 年龄".self:: $age;
}
function run(){
echo self:: $name."在走路<br>";
}
}
Person:: $name = '李四';
Person:: $sex = '男';
Person:: $age = 15;
$a =new Person();
$a -> say();
$a -> run();