Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在子对象内使用$this_Php - Fatal编程技术网

Php 在子对象内使用$this

Php 在子对象内使用$this,php,Php,我想将$this传递到我在构造上创建的子对象中,但是当我转储它时,我会得到一个**递归**标志 <?php namespace Cortana\Framework\System; use Cortana\Framework\System\ApiAccessor\CacheApiAccessor; use Cortana\Framework\System\ApiAccessor\ConfigurationApiAccessor; use Cortana\Framework\System\A

我想将$this传递到我在
构造上创建的子对象中,但是当我转储它时,我会得到一个
**递归**
标志

<?php
namespace Cortana\Framework\System;

use Cortana\Framework\System\ApiAccessor\CacheApiAccessor;
use Cortana\Framework\System\ApiAccessor\ConfigurationApiAccessor;
use Cortana\Framework\System\ApiAccessor\DatabaseApiAccessor;
use Cortana\Framework\System\ApiAccessor\EventsManagerApiAccessor;
use Cortana\Framework\System\ApiAccessor\FilesystemApiAccessor;
use Cortana\Framework\System\ApiAccessor\LocaleApiAccessor;
use Cortana\Framework\System\ApiAccessor\LogApiAccessor;
use Cortana\Framework\System\ApiAccessor\SessionApiAccessor;
use Cortana\Framework\System\ApiAccessor\TranslateApiAccessor;

/**
 * System Handler Instance
 * 
 * @author root
 */
class SystemHandler
{
    /**
     * Development Environment Flag
     * 
     * @var string
     */
    const ENV_DEVELOPMENT = 'DEVELOPMENT';

    /**
     * Staging Environment Flag
     *
     * @var string
     */
    const ENV_STAGING = 'STAGING';

    /**
     * Test Environment Flag
     *
     * @var string
     */
    const ENV_TEST = 'TEST';

    /**
     * Production Environment Flag
     *
     * @var string
     */
    const ENV_PRODUCTION = 'PRODUCTION';

    /**
     * Configuration api accessor instance
     * 
     * @var ConfigurationApiAccessor
     */
    protected $configurationApiAccessor;

    /**
     * Database api accessor instance
     *
     * @var DatabaseApiAccessor
     */
    protected $databaseApiAccessor;

    /**
     * Translation api accessor instance
     *
     * @var TranslateApiAccessor
     */
    protected $translateApiAccessor;

    /**
     * Cache api accessor instance
     *
     * @var CacheApiAccessor
     */
    protected $cacheApiAccessor;

    /**
     * Locale api accessor instance
     *
     * @var LocaleApiAccessor
     */
    protected $localeApiAccessor;

    /**
     * Events Manager api accessor instance
     *
     * @var EventsManagerApiAccessor
     */
    protected $eventsManagerApiAccessor;

    /**
     * Log api accessor instance
     *
     * @var LogApiAccessor
     */
    protected $logApiAccessor;

    /**
     * Session api accessor instance
     *
     * @var SessionApiAccessor
     */
    protected $sessionApiAccessor;

    /**
     * Filesystem api accessor instance
     *
     * @var FilesystemApiAccessor
     */
    protected $filesystemApiAccessor;

    /**
     * Array of Loaded Modules 
     *
     * @var array
     */
    protected $loadedModules=[];

    /**
     * System Environment
     * 
     * @var string
     */
    protected $environment;

    /**
     * System Handler Constructor. Loads Accessors
     */
    public function __construct()
    {
        $this->filesystemApiAccessor = new FilesystemApiAccessor();
        $this->configurationApiAccessor = new ConfigurationApiAccessor();
        $this->databaseApiAccessor = new DatabaseApiAccessor();
        $this->cacheApiAccessor = new CacheApiAccessor();
        $this->eventsManagerApiAccessor = new EventsManagerApiAccessor();
        $this->localeApiAccessor = new LocaleApiAccessor();
        $this->logApiAccessor = new LogApiAccessor();
        $this->sessionApiAccessor = new SessionApiAccessor();
        $this->translateApiAccessor = new TranslateApiAccessor();
    }

    public function build()
    {

    }

    /**
     * Set the system environment
     * 
     * @param string $environment the system environment
     * @return SystemHandler
     */
    public function setEnvironment($environment)
    {
        $this->environment = $environment;
        return $this;
    }

    /**
     * Return the system environment
     * 
     * @return string the system environment
     */
    public function getEnvironment()
    {
        return $this->environment;  
    }

    /**
     * Set the system loaded modules
     *
     * @param array $loadedmodules array of loaded system modules
     * @return SystemHandler
     */
    public function setLoadedModules(array $loadedmodules)
    {
        $this->loadedModules = $loadedmodules;
        return $this;
    }

    /**
     * Add a module as a loaded module
     * 
     * @param string $module module to add as a loaded module
     * @return SystemHandler
     */
    public function addLoadedModule($module)
    {
        $this->loadedModules[] = $module;
        return $this;
    }

    /**
     * Clear loaded modules
     * 
     * @return SystemHandler
     */
    public function clearLoadedModule()
    {
        $this->loadedModules = [];
        return $this;
    }

    /**
     * Set the configuration api accessor instance
     * 
     * @param ConfigurationApiAccessor $configurationApiAccessor the configuration api accessor instance
     * @return SystemHandler
     */
    public function setConfigurationApiAccessor(ConfigurationApiAccessor $configurationApiAccessor)
    {
        $this->configurationApiAccessor = $configurationApiAccessor;
        return $this;
    }

    /**
     * Return the configuration api accessor instance
     * 
     * @return ConfigurationApiAccessor the configuration api accessor instance
     */
    public function getConfigurationApiAccessor()
    {
        return $this->configurationApiAccessor;
    }

    /**
     * Set the database api accessor instance
     *
     * @param DatabaseApiAccessor $databaseApiAccessor the database api accessor instance
     * @return SystemHandler
     */
    public function setDatabaseApiAccessor(DatabaseApiAccessor $databaseApiAccessor)
    {
        $this->databaseApiAccessor = $databaseApiAccessor;
        return $this;
    }

    /**
     * Return the database api accessor instance
     *
     * @return DatabaseApiAccessor the database api accessor instance
     */
    public function getDatabaseApiAccessor()
    {
        return $this->databaseApiAccessor;
    }

    /**
     * Set the translation api accessor instance
     *
     * @param TranslateApiAccessor $translateApiAccessor the translation api accessor instance
     * @return SystemHandler
     */
    public function setTranslateApiAccessor(TranslateApiAccessor $translateApiAccessor)
    {
        $this->translateApiAccessor = $translateApiAccessor;
        return $this;
    }

    /**
     * Return the translation api accessor instance
     *
     * @return TranslateApiAccessor the translation api accessor instance
     */
    public function getTranslateApi()
    {
        return $this->translateApiAccessor;
    }

    /**
     * Set the cache api accessor instance
     *
     * @param CacheApiAccessor $cacheApiAccessor the cache api accessor instance
     * @return SystemHandler
     */
    public function setCacheApiAccessor(CacheApiAccessor $cacheApiAccessor)
    {
        $this->cacheApiAccessor = $cacheApiAccessor;
        return $this;
    }

    /**
     * Return the cache api accessor instance
     *
     * @return CacheApiAccessor the cache api accessor instance
     */
    public function getCacheApiAccessor()
    {
        return $this->cacheApiAccessor;
    }

    /**
     * Set the locale api accessor instance
     *
     * @param LocaleApiAccessor $localeApiAccessor the locale api accessor instance
     * @return SystemHandler
     */
    public function setLocaleApiAccessor(LocaleApi $localeApiAccessor)
    {
        $this->localeApiAccessor = $localeApiAccessor;
        return $this;
    }

    /**
     * Return the locale api accessor instance
     *
     * @return LocaleApiAccessor the locale api accessor instance
     */
    public function getLocaleApiAccessor()
    {
        return $this->localeApi;
    }

    /**
     * Set the events manager api accessor instance
     *
     * @param EventsManagerApiAccessor $eventsManagerApiAccessor the events manager api accessor instance
     * @return SystemHandler
     */
    public function setEventsManagerApiAccessor(EventsManagerApiAccessor $eventsManagerApiAccessor)
    {
        $this->eventsManagerApiAccessor = $eventsManagerApiAccessor;
        return $this;
    }

    /**
     * Return the events manager api accessor instance
     *
     * @return EventsManagerApiAccessor the events manager api accessor instance
     */
    public function getEventsManagerApiAccessor()
    {
        return $this->eventsManagerApiAccessor;
    }

    /**
     * Set the logger api accessor instance
     *
     * @param LogApiAccessor $logApiAccessor the log api accessor instance
     * @return SystemHandler
     */
    public function setLogApi(LogApiAccessor $logApiAccessor)
    {
        $this->logApiAccessor = $logApiAccessor;
        return $this;
    }

    /**
     * Return the log api accessor instance
     *
     * @return LogApiAccessor the log api accessor instance
     */
    public function getLogApi()
    {
        return $this->logApiAccessor;
    }

    /**
     * Set the session api accessor instance
     *
     * @param SessionApiAccessor $sessionApiAccessor the session api accessor instance
     * @return SystemHandler
     */
    public function setSessionApiAccessor(SessionApiAccessor $sessionApiAccessor)
    {
        $this->sessionApiAccessor = $sessionApiAccessor;
        return $this;
    }

    /**
     * Return the session api accessor instance
     *
     * @return SessionApiAccessor the session api accessor instance
     */
    public function getSessionApiAccessor()
    {
        return $this->sessionApiAccessor;
    }

    /**
     * Set the filesystem api accessor instance
     *
     * @param FilesystemApiAccessor $filesystemApiAccessor the filesystem api accessor instance
     * @return SystemHandler
     */
    public function setFilesystemApiAccessor(FilesystemApiAccessor $filesystemApiAccessor)
    {
        $this->filesystemApiAccessor = $filesystemApiAccessor;
        return $this;
    }

    /**
     * Return the filesystem api accessor instance
     *
     * @return FilesystemApiAccessor the filesystem api accessor instance
     */
    public function getFilesystemApiAccessor()
    {
        return $this->filesystemApiAccessor;
    }
}

创建扩展其他类的新类时,不需要向构造函数传递任何内容,只要这些方法/属性是公共的或受保护的,它就会在子类中自动可用。如果它们是私有的,则不能在子类中使用它们。如果要在子类中使用父类中的受保护/公共属性或方法,请将它们当作在父类中使用

class parent{
 protected $foo = 'foobar';
 protected function get_foo(){
  return $this->foo;
 }
}

class subclass extends parent{

 protected $bar;
 public function __construct(){
   $this->bar = $this->get_foo();
 }
 public function get_bar(){
   return $this->bar;
 }
}


$baz = new bar;
echo $baz->get_bar();

// outputs 'foobar'

你确定你的setter函数应该返回
$this
?你试过
parent::function_name()吗
@Maximus2012不要紧,它只用于方法链接(即
$class->setEnvironment('foo')->setLoadedModule('bar');
)。这只是一个转储/显示问题。由于您将外部对象嵌入子对象中,并且var_dump遵循链top->bottom,当它遇到存储的父对象指针时,它会注意到它是“递归的”,所以我可以将$this传递到构造上的对象中,它将可用吗?