`
hudeyong926
  • 浏览: 2034869 次
  • 来自: 武汉
社区版块
存档分类
最新评论

php class中self,parent,this的区别,以及实例

PHP 
阅读更多

我容易混淆public,private,protected,还容易混淆this,self这些东西。前面已经写了一篇关于public,private,protected 博文了,下面来说一下this,self,parent的用法

一,this

1,要用this,你必有是一个对像的形势,不然它会报错的,Fatal error: Using $this when not in object context。
2,this可以调用本类中的方法和属性,也可以调用父类中的可以调的方法和属性

二,self

1,self可以访问本类中的静态属性和静态方法,可以访问父类中的静态属性和静态方法。
2,用self时,可以不用实例化的


三,parent

1,parent可以访问父类中的静态属性和静态方法。
2,用parent时,可以不用实例化的

<?php

class test{
 public $public;
 private $private;
 protected $protected;
 static $instance;
 static $good = 'tankzhang <br>';
 public $tank = 'zhangying <br>';

 public  function __construct(){
 $this->public    = 'public     <br>';
 $this->private   = 'private    <br>';
 $this->protected = 'protected  <br>';

 }
 public function tank(){                          //私有方法不能继承,换成public,protected
 if (!isset(self::$instance[get_class()]))
 {
 $c = get_class();
 self::$instance = new $c;
 }
 return self::$instance;
 }    

 public function pub_function() {
 echo "you request public function<br>";
 echo $this->public;
 }
 protected  function pro_function(){
 echo "you request protected function<br>";
 echo $this->protected;
 }
 private function pri_function(){
 echo "you request private function<br>";
 echo $this->private;
 }
 static function sta_function(){
 echo "you request static function<br>";
 }
}

class test1 extends test{

 static $love = "tank <br>";
 private $aaaaaaa = "ying <br>";

 public function __construct(){
 parent::tank();
 parent::__construct();
 }
 public function tank(){
 echo $this->public;
 echo $this->protected;
 echo $this->aaaaaaa;
 $this->pro_function();
 }

 public  function test1_function(){
 echo self::$love;
 echo self::$good;
 echo parent::$good;
 echo parent::$tank;   //Fatal error: Access to undeclared static property: test::$tank
 echo self::$tank;     //Fatal error: Access to undeclared static property: test::$tank
 }
 static function extends_function(){
 parent::sta_function();
 self::pro_function();
 echo "you request extends_private function<br>";
 }
}

error_reporting(E_ALL);
$test = new test1();
$test->tank();            //子类和父类有相同名字的属性和方法,实例化子类时,会调用子类中的方法。
test1::test1_function();
test1::extends_function();  //执行一部分后,报Fatal error: Using $this when not in object context in D:\xampp\htdocs\mytest\www4.php on line 32
?>

1,当我们调用$test->tank(); 这个方法时,tank里面的$this是一个对像 ,这个对像可以调用本类,父类中的方法和属性,
2,test1::test1_function(); 当我们用静态的方法去调用非静态方法时,会显示警告的,Non-static method test::test1_function() should not be called statically可以看出不,self可以调用本类,父类中的静态属性 ,parent可以调用父类中的静态属性 ,二者调用非静态属性会报错。代码中有注释
3,test1::extends_function(); 这一步会报错,报在非对像中使用$this 。为什么会这样呢,test1::extends_function();只是调用了class中的一个方法,并没有实例化,所以根本不存在什么对像,当父类中用到$this时,就会报错

<?php
class A{
    public function test(){
        $objThis = new self(); //new A()
    }
}

 

 
 
分享到:
评论

相关推荐

    PHP5中的this self和parent关键字详解

    在PHP编程语言中,`this`、`self`和`parent`这三个关键字对于理解类的内部工作原理以及如何在继承中正确使用类成员至关重要。下面将详细解释这三个关键字的意义及其用法。 #### 1. `this` 关键字 `this`关键字在...

    php class中self,parent,this的区别以及实例介绍

    在PHP编程语言中,`self`, `parent`, 和 `this` 是三个特殊的关键词,它们各自在面向对象编程中扮演着不同的角色。理解这三个关键词的区别对于编写高质量的PHP类至关重要。 ### 1. `this` 关键词 `this` 关键词在...

    PHP5中的this,self和parent关键字详解教程

    在PHP5中,this、self和parent是三个非常重要的关键字,它们在面向对象编程中有着非常明确的用途和含义。为了更好地理解这三个关键字的用法,让我们一一进行探讨,并结合实例加深理解。 首先,让我们了解这三个...

    探讨PHP中this,self,parent的区别详解

    通过上面的例子,我们可以看到"this"用于修改当前对象实例的属性,"self"用于修改类的静态属性,而"parent"用于在子类中调用父类的方法。在实际应用中,正确地使用这三个关键字,能够确保代码的灵活性、扩展性和可...

    深入php self与$this的详解

    在PHP编程语言中,`self` 和 `$this` 是两个非常重要的关键字,它们在处理类和对象时扮演着关键角色。下面将详细解释这两个关键字,以及`parent`的关键字,帮助你深入理解PHP面向对象编程的基本概念。 首先,`self`...

    python中类属性和实例属性名字冲突怎么办共3页.pdf

    理解类属性和实例属性之间的区别以及如何处理名字冲突,对于编写清晰、可维护的Python代码至关重要。在实际编程中,根据具体需求选择合适的解决方案,既能保证代码的灵活性,又能减少潜在的错误。

    PHP5类与对象编程[定义].pdf

    本篇主要讨论的是PHP5中的类的静态成员、方法、常量以及self和parent这两个特殊关键字的使用。 首先,范围解析操作符(::)是PHP中用来访问类的静态成员、方法和常量的关键字。它在类的外部使用时,需要配合类名来...

    Python class的继承方法代码实例

    在这个版本中,虽然`child`类没有直接继承`parent`,但是我们在`child`的构造函数`__init__`中创建了一个`parent`的实例,然后在`child`的方法中通过这个实例来调用父类的方法。这种方法不推荐使用,因为它违背了...

    PyQt4 精彩实例分析

    在这个实例中,我们将了解如何获取和使用Qt中的位置信息,包括绝对位置、相对位置等。 **代码示例:** ```python from PyQt4.QtGui import * app = QApplication(sys.argv) window = QWidget() window.setWindow...

    PHP后期静态绑定之self::限制实例分析

    本文将深入探讨self::与static::的区别,并通过实例分析self::的限制。 首先,让我们明确一下self::的作用。self::关键字在PHP中代表了当前类自身,即无论何时何地使用self::,它总是指向定义它的那个类。这意味着...

    PHP5类与对象编程.pdf

    以上是关于PHP5中面向对象编程的基础知识点总结,包括范围解析操作符、self 和 parent 关键字、方法覆盖、静态关键字以及类常量等内容。掌握这些基本概念对于深入理解和使用PHP5面向对象编程至关重要。

    PHP5类与对象编程

    在上述示例中,`OtherClass` 继承自 `MyClass`,并且使用 `parent::CONST_VALUE` 访问了父类的常量 `CONST_VALUE`,同时使用 `self::$my_static` 访问了当前类的静态变量 `$my_static`。 #### 四、方法覆盖 当子类...

    python中定义类方法共3页.pdf.zip

    理解并熟练掌握类方法、实例方法、类方法和静态方法的使用,以及如何结合继承和多态,是成为高效Python开发者的关键。通过不断实践和学习,我们可以利用这些概念构建出更加灵活和可维护的代码。

    全面理解Python中self的用法

    在Python编程语言中,`self` 是一个非常关键的概念,特别是在类(class)的定义和对象(instance)的创建中。`self` 关键字在Python中用来引用类的实例,它是一个指向对象本身的引用,使得我们可以从类的方法中访问...

    PHP单例模式访问数据库

    PHP中的单例模式是一种非常重要的设计模式,其主要目的是限制类的实例化过程,确保一个类在整个程序中只有一个实例存在。这在处理全局资源,如数据库连接时尤其有用,因为它可以避免创建多个数据库连接,浪费系统...

Global site tag (gtag.js) - Google Analytics