关于类protectedprivatepublic的方法

Posted 周起

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于类protectedprivatepublic的方法相关的知识,希望对你有一定的参考价值。

今天在写代码的时候发现了一种情况,(TP框架)有一个model类   AdminModel.class.php

class AdminModel extends Model
{
protected $_validate = array(
array(‘username‘,‘require‘,‘管理员名称不得为空!‘,1),
//array(‘username‘,‘‘,‘管理员 名称已经存在!‘,1,‘unique‘,1),

array(‘password‘,‘require‘,‘管理员密码不得为空!‘,1,‘regex‘,1),
);

public function login()
{
$password = $this->password;
$info = $this->where(array(‘username‘=>$this->username))->getField(‘password‘);

if ($info == md5($password)){
return 1;
}else
return 0;
}

}

<?php
namespace Admin\Controller;

use Think\Controller;

class LoginController extends Controller
{
public function index()
{
$admin = D(‘admin‘);    //实例化AdminModel
if (IS_POST){
if ($admin->create()){
if ($admin->login()){  //使用AdminModel里的login方法
$this->success(‘登陆成功,跳转中……‘,U(‘Index/index‘));
}else{
$this->error(‘用户名或密码错误‘);
}
}else{
$this->error($admin->getError());
}
exit();
}

$this->display();
}
}

但是奇怪的是,当将login方法 属性设置为protected的时候,控制器中的$admin对象无法调用login()方法,上网搜索了一下,得到的答案如下。
原文地址:http://www.educity.cn/wenda/712078.html

一般规则如下: 
公有继承时,水平访问和垂直访问对基类中的公有成员不受限制; 
私有继承时,水平访问和垂直访问对基类中的公有成员也不能访问; 
保护继承时,对于垂直访问同于公有继承,对于水平访问同于私有继承。

 

规则中,称派生类的对象对基类访问为水平访问,称派生类的派生类对基类的访问为垂直访问

以上是关于关于类protectedprivatepublic的方法的主要内容,如果未能解决你的问题,请参考以下文章

关于类抽象类和接口的继承关系

关于一个类中方法的调用

关于抽象类

关于JAVA匿名内部类,回调,事件模式的一点讨论

关于类方法的调用

关于内部类的剖析