在PHP的最新版本(5.6以下)中,以下是一个无效程序
error_reporting(E_ALL);
class A
{
public function hello(X $one, Y $two)
{
}
}
class B extends A
{
public function hello()
{
}
}
interface X
{
}
interface Y
{
}
$b = new B;
PHP将拒绝运行此命令,而是显示如下所示的错误消息
PHP Strict standards: Declaration of B::hello
下面的代码会让PHP感到不满,因为customMethod()是私有的。为什么会这样呢?可见性是否由声明位置决定,而不是由定义位置决定?
如果我想让customMethod只对模板类中的样板代码可见,并防止它被覆盖,我会不会只是将其设置为protected和final?
Template.php:
abstract class Template() {
abstract private function customMethod();
public function commonMethod() {
$this->customMethod();
在我的团队目前正在进行的项目中,我们正在修改一个商业PHP应用程序。这个应用程序充满了父类检查和处理父类中不存在的属性的代码,如下所示:
class A
{
function doSomething()
{
if (property_exists($this, 'some_property'))
{
$this->some_property = $_REQUEST['val'];
}
}
}
class B extends A
{
protecte
我刚刚开始使用面向对象的php,所以请原谅我的无知。
假设我有一个A级
class A{
function show(){
return 15;
}
}
和一个子类B
class B extends A{
function show(){
return 25;
}
}
当我这样做的时候
$object = new B;
$object->show();
我得到25,这意味着我访问了孩子属性。如何访问parent属性;
我尝试了$object->A::show(),$object::sho
一位用户在PHP上发布了一条评论。这是第二次投票最多的评论。他使用了以下代码示例:
<?php
abstract class base {
public function inherited() {
$this->overridden();
}
private function overridden() {
echo 'base';
}
}
class child extends base {
private function overridden() {
echo '
我在一个项目中工作,该项目使用PHP中的OOP。
问题是,当我试图从一个抽象类实例化两个子类时,只有第一个实例,而不是两个。
DataBase.php:
abstract class DataBase {
private $_connection;
private static $_singleton = false;
/**
* Fetch an instance of the class.
*/
public final static function connect () {
if ( self::$_single
如果我有这样的类:
<?php
class Model
{
var $db;
function Model()
{
$this->db=new Db_Class();
}
}
?>
以及扩展父类的第二个类:
<?php
class LessonModel extends Model
{
public function LessonModel()
{
//code here
}
public function getTitle($id)
{
$thi
我正在尝试MVC,试图创建一个简单的框架。这是我正在做的一个例子:
<?php
require_once('config.php'); //Here I have the Config object
class App{
protected $config;
protected $controller;
public function init(){
$this->config = new Config;
$this->controller = new Main_Controller;
}
}
c
每当我用简单的东西包含beforeAction函数事件时,我就会收到一个错误,说它必须兼容。这不仅发生在我的现场服务器上,只发生在本地服务器上。我能想到的唯一不同是我的本地服务器运行PHP7,而我的活动服务器运行PHP5.6。这就是造成问题的原因吗?我发现唯一能修复它的就是把它完全移除。
这就是我的beforeAction的样子
public function beforeAction()
{
if(Yii::$app->user->isGuest){
return $this->redirect(['site/lo
在PHP中编码和使用延迟静态绑定时,我发现了一些奇怪的行为。在父类中使用static()创建的子对象可以访问其父对象的私有方法。
下面是一个例子:
class Attachment
{
public static function createFromFile($file)
{
$attachment = new static();
echo get_class($attachment) . PHP_EOL;
$attachment->loadFromFile($file);
}
private function loadFromFile($fi
阅读PHP.net文档时,我偶然发现了一个问题,这个问题扭曲了我对$this的理解:
class C {
public function speak_child() {
//echo get_class($this);//D
echo $this->f();//calls method of C class... why?!
}
private function f() {
echo "C";
}
}
class D extends C {
public function spea
不知何故,我的思想远离了当前的问题,我犯了一个可怕的错误。我在一个只初始化类属性的方法中调用了一个父构造函数。还是我..。父构造函数的工作是设置ID值。PHP让我做到了这一点。但这难道不是错的吗?看起来我可以用同样的方式调用类自己的构造函数。不是应该只允许构造函数在创建类的实例时调用吗?仅在创建实例时调用..
<?php
class A {
public function __construct() {
echo "Test<br />";
}
}
class B exte
A PHP Error was encountered
Severity: Runtime Notice
Message: Declaration of MY_Email::initialize() should be compatible with
that of CI_Email::initialize()
Filename: libraries/MY_Email_3_1_x.php
Line Number: 1374
Backtrace:
File: C:\xampp\htdocs\e-com\application\libraries\MY_Email.php
Line:
我想在我的类中使用函数多态性。我打算检查一些子类函数的函数的输入类型。
class A
{
public function setValue(Type $value)
{
}
}
class B extends A
{
public function setValue(XType $value)
{
}
}
class C extends A
{
public function setValue(ZType $value)
{
}
}
$b = new B();
$b->setValue(new XType())
我是一个新的PHP,我有一些像这样的文件:
在root.php我有
<?php
class Root
{
// Some functions here
}
在child_1.php中,我有:
class Child_1 extends Root
{
function abc()
{
//Some code here
}
}
在child_2.php中,我有:
class Child_2 extends Root
{
function cde()
{
// How can i call function abc() from class Child_1 here
为什么可以从PHP的子类对象访问私有属性。根据OOP的概念,私有方法不能从子类访问,但PHP似乎没有遵循OOP规则或其他任何东西,请给出一个有效的理由。
<?php
class Car{
private $model;
public $noOfseats;
public function setModel($m){
$this->model = $m;
}
public function setNoOfSeats($n){
$this->noOfseats = $n;
我创建了这个类
<?php
abstract class Validator{
public $_errors = array();
abstract public function isValid($input);
public function _addErrors($message){
$this->_errors = $message;
}
public function getErrors(){
return $this->_e
我想让类B能够访问类A的protected属性x。需要注意的是,我既不想让x成为public,也不想通过getter函数公开它的内容。应该有权访问A->x的类只有A和B。
<?php
class A
{
protected $x = 'some content';
}
class B
{
protected $a;
public function __construct(A $a)
{
$this->a = $a;
}
public function print_x()
{