首页 > 编程知识 正文

php继承问题汗血宝马(PHP 继承)

时间:2023-12-24 12:05:57 阅读:321284 作者:EUEY

本文目录一览:

thinkphp 模板继承问题

thinkPHP对模板文件进行目录划分,默认的模板文件定义规则是:视图目录/[模板主题/]控制器名/操作名+模板后缀。默认的视图目录是模块的View目录(模块可以有多个视图文件目录,这取决于你的应用需要),框架的默认视图文件后缀是.html。新版模板主题默认是空(表示不启用模板主题功能)。在每个模板主题下面,是以模块下面的控制器名为目录,然后是每个控制器的具体操作模板文件,例如:User控制器的add操作对应的模板文件就应该是:View/User/add.html一些其他配置:1.'DEFAULT_V_LAYER'='Template',//设置默认的视图层名称//结果:Template/User/add.html2.'TMPL_TEMPLATE_SUFFIX'='.tpl',//设置默认后缀//结果:View/User/add.tpl3.'TMPL_FILE_DEPR'='_',//配置模板的目录层次//结果:View/User_add.html4.'DEFAULT_THEME'='default',//设置默认的模板主题//没有启用模板主题之前View/User/add.html//启用模板主题之后View/default/User/add.html

PHP类继承的问题,子类继承父类,实例化子类,先执行父类还是先执行子类?

不是这个意思。所谓“实例化子类的对象前要先实例化父类中的内容,为父类初始化”,是指当子类正在实例化时,总是链式调用父类构造方法初始化父类空间。换句话说,子类的构造方法必须先调用父类的构造方法,完了才能干别的初始化工作。如果子类没有显式调用语句,编译器会隐式帮你加上。

如:

public class A{ public A() { }}public class B extends A{ public B() { }}等价于:

public class A{ public A() { super();//这里实际上是Object(); //其他初始化工作 }}public class B extends A{ public B() { super();//这里实际上是A(); //其他初始化工作 }}另外,如果有这种情况:

public class A{ X x=new X(); public A() { }}public class B extends A{ Y y=new Y(); public B() {//这是类A空间里的字段都已经初始化完毕。 }}在成员y被赋值之前,x一定已经存在。换句话说,X x=new X();一定先于Y y=new Y();执行。

php 继承一个类一定要引用一下吗

php有自动加载类的功能,但是需要遵循一定的规则,并且需要额外的代码支持实现。

对于你说的问题,较常见的情况是b.php里面虽然没有引用a.php,但是c.php可能引用了a.php及b.php。只要在一个php进程中保证引用了这些文件就行,引用位置是可变的。例如在第一行引用和在第二行引用没有区别,只要在new之前引用过就好了。但是明显这不是值得推荐的。

thinkphp5.1,类继承问题请问我的为什么是错的。class Index extends thinkController?

单词错啦好几个,field不是filed,assign不是assgin,这些都是方法名,是不可以错的,还有这个错误提示的意思是变量未定义,你要检查下相关的字段是否存在。

php中静态类的继承

楼主这个问题跟静态没有多大关系,主要是继承的概念没有搞清楚,继承一个类是将子类拥有了调用父类的方法和属性的权利,并不是说将父类的方法复制到了子类中self方法相当于当前类的指针,你那样调用相当于写了

public static function test() {

parent::who();

}

这样的代码,所以才会出现那样的结果

PHP继承的问题,调用父类的方法this指向问题。

我来说一说:

【一】…………public(仅有)属性和方法的继承…………

class a{

public $var = 'var a br/';

public function m(){

echo 'fun a br/';

}

public function run(){

echo $this-var;

$this-m();

}

}

class b extends a{

public $var = 'var b br/';

public function m(){

echo 'fun b br/';

}

}

$li = new b();

$li-run();

echo 'hr';

var_dump($li);

输出:

var b 

fun b 

————————————————————————————

object(b)[1]

  public 'var' = string 'var b br/' (length=11)

在这段代码中所表示的,是我们常见的一种继承方式,同为公有属性的$var 和公有方法m()

在这里,$var和m()都被继承并覆写,实例化过后,内存中只有一个$var实例,通过var_dump($li);我们可以看到它。

【二】…………private(私有)属性和方法的继承…………

class a{

private $var = 'var a br/';

private function m(){

echo 'fun a br/';

}

public function run(){

echo $this-var;

$this-m();

var_dump($this);

echo 'br/br/';

}

}

class b extends a{

private $var = 'var b br/';

private function m(){

echo 'fun b br/';

}

public function run(){

echo $this-var;

$this-m();

var_dump($this);

echo 'br/br/';

parent::run();

}

}

$li = new b();

$li-run();

echo 'hr';

var_dump($li);

输出:

var b 

fun b 

object(b)[1]

  private 'var' = string 'var b br/' (length=11)

  private 'var' (a) = string 'var a br/' (length=11)

.

.

var a 

fun a 

object(b)[1]

  private 'var' = string 'var b br/' (length=11)

  private 'var' (a) = string 'var a br/' (length=11)

.

————————————————————————————————

object(b)[1]

  private 'var' = string 'var b br/' (length=11)

  private 'var' (a) = string 'var a br/' (length=11)

这个时候,我们可以看到,在调用run方法时,首先它会调用到b类的私有属性$var 和私有方法m(),随后,又使用parent::run()调用父类的run()方法,我们可以看到,父类的run()方法调用后,它所调用的属性和方法,都是a类的两个私有属性和方法,这种形式,和你的问题一致;

而它与$this指向无关,我们可以在这里看到,两个$this都是指向b类。

而最有意思的是,在$li句柄中,我们却看到了两个属性!一个是b类的属性,一个是a类的属性,这两个属性同时存在着,那么,私有方法也自然是同时存在着。

【三】…………私有属性和方法能不能被继承…………

class a{

private $var = 'var a br/';

private function m(){

echo 'fun a br/';

}

}

class b extends a{

public function run(){

echo $this-var;

$this-m();

}

}

$li = new b();

$li-run();

输出:

Notice: Undefined property: b::$var in E: ... on Line 9

Fatal error: Call to private method a::m() from context 'b' in E: ... on Line 10

这可以证明,私有属性和方法,无法被继承,所以,你的代码示例中所说,将a类的m()方法更改为private后,会显示aa的属性,也就可以理解明白了。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。