前端学PHP之面向对象种类第伍篇,self那多少个重庆大学字选拔格局

前边的话

  php完成面向对象的1个让人惊叹特点是大气应用主要字,本文将详细介绍关键字

 

近来的话

  php完毕面向对象的1个分明特点是大批量选取首要字,本文将详细介绍关键字

 

public

  public代表公有,它抱有最大的访问权限,被定义为国有的类成员能够在别的地点被访问

  假设属性用 var
定义,则被视为公有,即便措施没有安装重要字,则该方法暗中同意为国有

澳门葡京备用网址 1

<?php
class demo{
    public $public = 1;
    function test($var){
        echo "{$var}000";
    }
}
$d1 = new demo;
$d1->test($d1->public);//1000
?>

澳门葡京备用网址 2

 

本篇作品首要分项了一晃关于php类中的$this,static,final,const,self那多少个首要字选取方法。

public

  public代表公有,它装有最大的拜访权限,被定义为国有的类成员能够在别的地方被访问

  若是属性用 var
定义,则被视为公有,假如措施没有设置首要字,则该方法暗中认可为国有

<?php
class demo{
    public $public = 1;
    function test($var){
        echo "{$var}000";
    }
}
$d1 = new demo;
$d1->test($d1->public);//1000
?>

 

public

  public代表公有,它兼具最大的拜访权限,被定义为国有的类成员能够在别的地点被访问

  倘若属性用 var
定义,则被视为公有,借使艺术没有安装主要字,则该方法私下认可为国有

<?php
class demo{
    public $public = 1;
    function test($var){
        echo "{$var}000";
    }
}
$d1 = new demo;
$d1->test($d1->public);//1000
?>

 

protected

  protected表示受保证的,被定义为受保险的类成员则足以被其子类和父类访问

澳门葡京备用网址 3

<?php
class demo{
    protected function fn(){
        echo '111';
    }
}
class demo1 extends demo{
    function test(){
        parent::fn();
    }    
}
$d1 = new demo1;
$d1->test();//111
?>

澳门葡京备用网址 4

 

  $this

protected

  protected表示受保险的,被定义为受保证的类成员则足以被其本身以及其子类和父类访问

<?php
class demo{
    protected function fn(){
        echo '111';
    }
}
class demo1 extends demo{
    function test(){
        parent::fn();
    }    
}
$d1 = new demo1;
$d1->test();//111
?>

 

protected

  protected表示受保障的,被定义为受保证的类成员则能够被其本人以及其子类和父类访问

<?php
class demo{
    protected function fn(){
        echo '111';
    }
}
class demo1 extends demo{
    function test(){
        parent::fn();
    }    
}
$d1 = new demo1;
$d1->test();//111
?>

 

private

  private表示私有的,被定义为私家的类成员则只可以被其定义所在的类访问

澳门葡京备用网址 5

<?php
class demo{
    private $private = 1;
    function test(){
        echo($this->private);
    }
}
$d1 = new demo;
$d1->test();//1
?>    

澳门葡京备用网址 6

 

  $this表示最近实例,在类的在那之中方法访问未申明为const及static的性质时,使用$this->value=’phpernote’;的方式。常见用法如:

private

  private表示私有的,被定义为私有的类成员则只好被其定义所在的类访问

<?php
class demo{
    private $private = 1;
    function test(){
        echo($this->private);
    }
}
$d1 = new demo;
$d1->test();//1
?>    

 

private

  private表示私有的,被定义为私家的类成员则不得不被其定义所在的类访问

<?php
class demo{
    private $private = 1;
    function test(){
        echo($this->private);
    }
}
$d1 = new demo;
$d1->test();//1
?>    

 

final

  PHP5新增了final关键字,它只可以用来修饰类和艺术,无法选择final那一个首要字来修饰成员属性,因为final是常量的情致,大家在PHP里定义常量使用的是define()函数和const关键字,所以不能够选拔final来定义成员属性

  倘若父类中的方法被声称为final,则子类不能覆盖该办法。如若三个类被声称为 final,则无法被接续

澳门葡京备用网址 7

<?php
class BaseClass {
   public function test() {
       echo "BaseClass::test() called\n";
   }
   final public function moreTesting() {
       echo "BaseClass::moreTesting() called\n";
   }
}
class ChildClass extends BaseClass {
   public function moreTesting() {
       echo "ChildClass::moreTesting() called\n";
   }
}
// Results in Fatal error: Cannot override final method BaseClass::moreTesting()
?>

澳门葡京备用网址 8

 

  $this->属性

final

  PHP5新增了final关键字,它不得不用来修饰类和章程,不能够选择final那些第1字来修饰成员属性,因为final是常量的意思,大家在PHP里定义常量使用的是define()函数和const关键字,所以不可能动用final来定义成员属性

  假若父类中的方法被声称为final,则子类无法覆盖该措施。假设一个类被声称为
final,则无法被一而再

<?php
class BaseClass {
   public function test() {
       echo "BaseClass::test() called\n";
   }
   final public function moreTesting() {
       echo "BaseClass::moreTesting() called\n";
   }
}
class ChildClass extends BaseClass {
   public function moreTesting() {
       echo "ChildClass::moreTesting() called\n";
   }
}
// Results in Fatal error: Cannot override final method BaseClass::moreTesting()
?>

前端学PHP之面向对象种类第伍篇,self那多少个重庆大学字选拔格局。 

final

  PHP5新增了final关键字,它不得不用来修饰类和格局,无法接纳final那几个首要字来修饰成员属性,因为final是常量的趣味,大家在PHP里定义常量使用的是define()函数和const关键字,所以不能运用final来定义成员属性

  纵然父类中的方法被声称为final,则子类不可能掩盖该办法。假诺一个类被声称为
final,则无法被接续

<?php
class BaseClass {
   public function test() {
       echo "BaseClass::test() called\n";
   }
   final public function moreTesting() {
       echo "BaseClass::moreTesting() called\n";
   }
}
class ChildClass extends BaseClass {
   public function moreTesting() {
       echo "ChildClass::moreTesting() called\n";
   }
}
// Results in Fatal error: Cannot override final method BaseClass::moreTesting()
?>

 

static

  static关键字表示静态的意思,用于修饰类的成员属性和成员方法(即为静态属性和静态方法)

  类中的静态属性和静态方法不用实例化(new)就足以平素选拔类名访问

  [注意]静态属性无法因而一个类已实例化的靶子来走访,但静态方法能够

  由于静态方法不须求经过对象即可调用,所以伪变量 $this
在静态方法中不可用,静态属性不得以由对象通过 -> 操作符来访问

  用静态方式调用三个非静态方法会导致3个 E_STCRUISERICT 级别的失实

  就像任何具有的 PHP 静态变量一样,静态属性只可以被起始化为文字或常量,无法运用表明式。所以可以把静态属性开头化为整数或数组,但不能够初叶化为另1个变量或函数再次来到值,也不能够指向多个对象

澳门葡京备用网址 9

<?php
class Foo
{
    public static $my_static = 'foo';
    public function staticValue() {
        return self::$my_static;
    }
}
class Bar extends Foo
{
    public function fooStatic() {
        return parent::$my_static;
    }
}
print Foo::$my_static . "\n";//'foo'
$foo = new Foo();
print $foo->staticValue() . "\n";//'foo'
print $foo::$my_static . "\n";//'foo'
print $foo->my_static . "\n"; //报错 
?>

澳门葡京备用网址 10

 

  $this->方法

static

  static关键字表示静态的趣味,用于修饰类的成员属性和分子方法(即为静态属性和静态方法)

  类中的静态属性和静态方法不用实例化(new)就足以一贯利用类名访问

  [注意]静态属性不能够通过二个类已实例化的靶子来走访,但静态方法能够

  由于静态方法不须要通过对象即可调用,所以伪变量 $this
在静态方法中不可用,静态属性不能由对象通过 -> 操作符来访问

  用静态方式调用一个非静态方法会促成3个 E_STLacrosseICT 级别的不当

  就如任何具有的 PHP
静态变量一样,静态属性只可以被初步化为文字或常量,不能够应用表达式。所以能够把静态属性早先化为整数或数组,但不可能开始化为另三个变量或函数重临值,也不可能指向一个对象

<?php
class Foo
{
    public static $my_static = 'foo';
    public function staticValue() {
        return self::$my_static;
    }
}
class Bar extends Foo
{
    public function fooStatic() {
        return parent::$my_static;
    }
}
print Foo::$my_static . "\n";//'foo'
$foo = new Foo();
print $foo->staticValue() . "\n";//'foo'
print $foo::$my_static . "\n";//'foo'
print $foo->my_static . "\n"; //报错 
?>

  static的常用场景是迭代器中

function test(){
  static $count = 0;
  $count++;
  echo $count.' ';
  if($count<10){
    test();
  }
}
test();

 

static

  static关键字表示静态的情趣,用于修饰类的分子属性和分子方法(即为静态属性和静态方法)

  类中的静态属性和静态方法不用实例化(new)就足以平素使用类名访问

  [注意]静态属性无法因此二个类已实例化的对象来拜会,但静态方法能够

  由于静态方法不必要经过对象即可调用,所以伪变量 $this
在静态方法中不可用,静态属性不能由对象通过 -> 操作符来访问

  用静态格局调用1个非静态方法会导致3个 E_ST大切诺基ICT 级别的失实

  就像是其余具有的 PHP
静态变量一样,静态属性只可以被伊始化为文字或常量,不能够使用表明式。所以能够把静态属性初步化为整数或数组,但不可能开始化为另1个变量或函数重回值,也不可能指向三个对象

<?php
class Foo
{
    public static $my_static = 'foo';
    public function staticValue() {
        return self::$my_static;
    }
}
class Bar extends Foo
{
    public function fooStatic() {
        return parent::$my_static;
    }
}
print Foo::$my_static . "\n";//'foo'
$foo = new Foo();
print $foo->staticValue() . "\n";//'foo'
print $foo::$my_static . "\n";//'foo'
print $foo->my_static . "\n"; //报错 
?>

  static的常用场景是迭代器中

function test(){
  static $count = 0;
  $count++;
  echo $count.' ';
  if($count<10){
    test();
  }
}
test();

 

const

  能够把在类中始终维持不变的值定义为常量。在概念和动用常量的时候不要求使用$符号,而是采用const

  常量的值必须是四个定值,不可能是变量,类天性,数学生运动算的结果或函数调用

澳门葡京备用网址 11

<?php
class MyClass
{
    const constant = 'constant value';
    function showConstant() {
        echo  self::constant . "\n";
    }
}
echo MyClass::constant . "\n";//'constant value'
$classname = "MyClass";
echo $classname::constant . "\n"; //'constant value'
$class = new MyClass();
$class->showConstant();//'constant value'
echo $class::constant."\n";//'constant value'
?>

澳门葡京备用网址 12

 

  举例如下:

const

  能够把在类中平昔维持不变的值定义为常量。在概念和应用常量的时候不需求使用$符号,而是采纳const

  常量的值必须是2个定值,无法是变量,类性质,数学生运动算的结果或函数调用

<?php
class MyClass
{
    const constant = 'constant value';
    function showConstant() {
        echo  self::constant . "\n";
    }
}
echo MyClass::constant . "\n";//'constant value'
$classname = "MyClass";
echo $classname::constant . "\n"; //'constant value'
$class = new MyClass();
$class->showConstant();//'constant value'
echo $class::constant."\n";//'constant value'
?>

 

const

  能够把在类中一贯维持不变的值定义为常量。在概念和选取常量的时候不须求动用$符号,而是使用const

  常量的值必须是四个定值,不可能是变量,类性质,数学生运动算的结果或函数调用

<?php
class MyClass
{
    const constant = 'constant value';
    function showConstant() {
        echo  self::constant . "\n";
    }
}
echo MyClass::constant . "\n";//'constant value'
$classname = "MyClass";
echo $classname::constant . "\n"; //'constant value'
$class = new MyClass();
$class->showConstant();//'constant value'
echo $class::constant."\n";//'constant value'
?>

 

this

  当八个措施在类定义内部被调用时,有三个可用的伪变量this,特殊对象的引用this便是在指标内部的积极分子方法中,代表本对象的一个引用,但只可以在对象的成员方法中选择,不管是在目的内部选取$this访问自身指标内部成员。依然在指标外部通过对象的引用名称访问对象中的成员,都急需动用特殊的运算符“->”来形成访问

  [注意]this在静态方法中不可用

澳门葡京备用网址 13

<?php
class A
{
    function foo()
    {
        if (isset($this)) {
            echo '$this is defined (';
            echo get_class($this);
            echo ")\n";
        } else {
            echo "\$this is not defined.\n";
        }
    }
}
class B
{
    function bar()
    {
        // Note: the next line will issue a warning if E_STRICT is enabled.
        A::foo();
    }
}

$a = new A();
$a->foo();//$this is defined (A) 
A::foo();//$this is not defined. 
$b = new B();
$b->bar();//$this is defined (B) 
B::bar();//$this is not defined.
?>

澳门葡京备用网址 14

 

<?php
class MyClass{
 private $name;
 public function __construct($name){
 $this->name=$name;
 }
 public function getname(){
 return $this->name;
 }
 public function printName(){
 echo $this->getname();
 }
}
$myclass= new MyClass("I Like www.jb51.net");
$myclass->printName();//输出:I Like www.jb51.net
?>

this

  当二个主意在类定义内部被调用时,有一个可用的伪变量this,特殊指标的引用this就是在对象内部的分子方法中,代表本对象的一个引用,但不得不在对象的成员方法中运用,不管是在目的内部采纳$this访问本身指标内部成员。依然在对象外部通过对象的引用名称访问对象中的成员,都亟待运用异乎平时的运算符“->”来成功访问

  [注意]澳门葡京备用网址 ,this在静态方法中不可用

<?php
class A
{
    function foo()
    {
        if (isset($this)) {
            echo '$this is defined (';
            echo get_class($this);
            echo ")\n";
        } else {
            echo "\$this is not defined.\n";
        }
    }
}
class B
{
    function bar()
    {
        // Note: the next line will issue a warning if E_STRICT is enabled.
        A::foo();
    }
}

$a = new A();
$a->foo();//$this is defined (A) 
A::foo();//$this is not defined. 
$b = new B();
$b->bar();//$this is defined (B) 
B::bar();//$this is not defined.
?>

 

this

  当四个办法在类定义内部被调用时,有三个可用的伪变量this,特殊目的的引用this便是在目的内部的成员方法中,代表本对象的一个引用,但不得不在目的的积极分子方法中央银行使,不管是在对象内部使用$this访问自身目的内部成员。照旧在目的外部通过对象的引用名称访问对象中的成员,都要求运用尤其的运算符“->”来完毕访问

  [注意]this在静态方法中不可用

<?php
class A
{
    function foo()
    {
        if (isset($this)) {
            echo '$this is defined (';
            echo get_class($this);
            echo ")\n";
        } else {
            echo "\$this is not defined.\n";
        }
    }
}
class B
{
    function bar()
    {
        // Note: the next line will issue a warning if E_STRICT is enabled.
        A::foo();
    }
}

$a = new A();
$a->foo();//$this is defined (A) 
A::foo();//$this is not defined. 
$b = new B();
$b->bar();//$this is defined (B) 
B::bar();//$this is not defined.
?>

 

self

  在类的法子中,不可能用this来引用静态变量或静态方法,而急需用self来引用

澳门葡京备用网址 15

<?php
class MyClass
{
    const constant = 'constant value';
    static function showConstant() {
        echo  self::constant . "\n";
    }
}
$var = new MyClass;
echo $var->showConstant();//constant value
?>

澳门葡京备用网址 16

 

  在类里面调用当前类的性情和艺术有三种情势,分别是self、parent、$this,那四个重点字的区分是:self用来针对当前的类;parent用于指向当前类的父类,能够应用该重庆大学字调用父类的习性和章程;$this用来在类体内调用自笔者的特性和措施。

self

  在类的法门中,不可能用this来引用静态变量或静态方法,而须求用self来引用

<?php
class MyClass
{
    const constant = 'constant value';
    static function showConstant() {
        echo  self::constant . "\n";
    }
}
$var = new MyClass;
echo $var->showConstant();//constant value
?>

 

self

  在类的不二法门中,不可能用this来引用静态变量或静态方法,而供给用self来引用

<?php
class MyClass
{
    const constant = 'constant value';
    static function showConstant() {
        echo  self::constant . "\n";
    }
}
$var = new MyClass;
echo $var->showConstant();//constant value
?>

 

parent

  parent用于在子类中调用父类中定义的分子方法或常量

澳门葡京备用网址 17

<?php
class MyClass{
    function fn(){
        echo('111');
    }
    const A = 'a';
}
class Class1 extends MyClass{
    function test(){
        echo parent::fn().parent::A;
    }
}
$var = new Class1;
$var->test();//111a
?>

 

  static

parent

  parent用于在子类中调用父类中定义的分子方法或常量

<?php
class MyClass{
    function fn(){
        echo('111');
    }
    const A = 'a';
}
class Class1 extends MyClass{
    function test(){
        echo parent::fn().parent::A;
    }
}
$var = new Class1;
$var->test();//111a
?>

parent

  parent用于在子类中调用父类中定义的分子方法或常量

<?php
class MyClass{
    function fn(){
        echo('111');
    }
    const A = 'a';
}
class Class1 extends MyClass{
    function test(){
        echo parent::fn().parent::A;
    }
}
$var = new Class1;
$var->test();//111a
?>

  关键字能够是self(在类内部调用静态成员时所运用)静态成员所在的类名(在类向外调拨运输用类内部的静态成员时所选拔)
  声美素佳儿个静态变量如下: 

static $val='';

  只存在于函数成效域的变量,函数执行之后变量的值不会丢掉,只会开端化一次,开首化静态变量不可能使用表明式,不用全局变量代替是因为全局变量会被全体函数访问容易造成维护不宜。
  在类中央银行使static有三种首要用途、定义静态成员和定义静态方法。静态成员只保留3个变量的值,这几个值对全数实例都是实惠的,如下:

<?php
class MyObject{
 public static $myStaticVar=0;
 function myMethod(){
 self::$myStaticVar+=2;
 echo self::$myStaticVar;
 }
}
$instance1=new MyObject();
$instance1->myMethod();
$instance2=new MyObject();
$instance2->myMethod();
  //结果将分别打印2、4

 代码如下

<?php
class Book{
 static $num=0;
 public function showMe(){
 echo"您是滴".self::$num."位访客";
 self::$num++;
 }
}
$book1=new Book();
$book1->showMe();
echo"<br>";
$book2=new Book();
$book2->showMe();
echo"<br>";
echo"您是滴".Book::$num."位访客";
?>

  结果将是:

  您是滴0位访客
  您是滴1位访客
  您是滴2位访客

  此外部供给要小心的是只要类的方法是static的,他所访问的品质也亟须是static的。

  final

  PHP
final关键字可以修饰类同样能够修改类中的方法,但它们的功力是大半的,即若是您使用了final关键字来修饰了,那么那几个被修饰的类依旧措施将无法被扩张恐怕接续。你不得不老老实实去引用它。借使你在类前边使用了final,那正是印证那些类不可能采用持续;如果你在方式前应用了PHP
final关键字,那正是验证那些主意不可能被掩盖。道理就是如此简单,让大家也看个大约的演示吧。

  最后的类和章程,无法持续,该重大字修饰的格局不可能被重写。一般用法如下:

final class MyClass{//此类将不允许被继承
  final function fun1(){......}//此方法将不允许被重写
  }

  例

 < ?PHP  
  final class BaseClass {  
  public function test() {  
  echo "BaseClass::test() calledn";  
  }  
  final public function moreTesting() {  
  echo "BaseClass::moreTesting() calledn";  
  }  
  }  
  class ChildClass extends BaseClass {  
  public function moreTesting() {  
  echo "ChildClass::moreTesting() calledn";  
  }  
  }  
  // Results in Fatal error: Cannot override final method BaseClass::moreTesting()  
  ?> 

  const

  在类的中间方法访问已经宣称为const及static的属性时,供给利用self::$name的款型调用。举例如下:

<?php
class clss_a{
 private static $name="static class_a"; 
 const PI=3.14; 
 public $value; 
 public static function getName(){ 
 return self::$name; 
 } 
 //这种写法有误,静态方法不能访问非静态属性 
 public static function getName2(){ 
 return self::$value; 
 } 
 public function getPI(){ 
 return self::PI; 
 }
}

  注意const属性的申明格式是const
PI=3.14,而不是const $PI=3.14。

  self

  self表示类本人,指向当前的类。平常用来访问类的静态成员、方法和常量。

以上内容大概给大家介绍了php类中的$this,static,final,const,self那多少个第1字接纳方法,希望我们欣赏。

您或然感兴趣的小说:

  • 深切掌握PHP中的static和yield关键字
  • PHP中static关键字以及与self关键字的不一样
  • Java中static关键字的功用和用法详细介绍
  • C/C++中static,const,inline三种首要字详细总括
  • static关键字的效果详解
  • php Static关键字实用方法
  • php面向对象全攻略 (十) final static
    const关键字的运用
  • 深切浅析c/c++
    中的static关键字

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website