Yii PHP 프레임 워 크 분석 (3)
37278 단어 PHP직장yii레저프레임 분석 (3)
- Yii PHP ( )
-
- :wdy
-
- http://hi.baidu.com/delphiss/blog/item/357663d152c0aa85a1ec9c44.html
-
- Yii Yii ,Yii :
-
- class Yii extends YiiBase
- {
- }
-
- yiic Yii YiiBase “ ”, Yii 。
-
- Yii( YiiBase) “helper class”, 。
-
- Yii :
- $_aliases :
- $_imports :
- $_classes :
- $_includePaths php include paths
- $_app : CWebApplication , Yii::app()
- $_logger :
-
- $_app Yii::createWebApplication() 。
-
-
-
- Yii php5 autoload , YiiBase autoload()。
-
- new ,php , include。
-
- autoload “ ”, include 。
-
- YiiBase $_coreClasses Yii 。 Yii Yii::import() ,Yii::import() $_classes , * php include_path 。 Yii::import() $_imports , 。
-
- /* Yii::import()
- * $alias:
- * $forceInclude false: include ,true include
- */
- public static function import($alias,$forceInclude=false)
- {
- // $alias YiiBase::$_imports[] , return, import。
- if(isset(self::$_imports[$alias])) // previously imported
- return self::$_imports[$alias];
- // $alias , $_imports[],
- if(class_exists($alias,false) || interface_exists($alias,false))
- return self::$_imports[$alias]=$alias;
- // $_coreClasses[] , . , $_imports[],
- if(isset(self::$_coreClasses[$alias]) || ($pos=strrpos($alias,'.'))===false) // a simple class name
- {
- self::$_imports[$alias]=$alias;
- if($forceInclude)
- {
- if(isset(self::$_coreClasses[$alias])) // a core class
- require(YII_PATH.self::$_coreClasses[$alias]);
- else
- require($alias.'.php');
- }
- return $alias;
- }
- // $className, $alias .
- // :'x.y.ClassNamer'
- // $className '*', ClassNamer , ClassNamer' $_imports[],
- if(($className=(string)substr($alias,$pos+1))!=='*' && (class_exists($className,false) || interface_exists($className,false)))
- return self::$_imports[$alias]=$className;
- // $alias ,
- if(($path=self::getPathOfAlias($alias))!==false)
- {
- // * ( )
- if($className!=='*')
- {
- self::$_imports[$alias]=$className;
- if($forceInclude)
- require($path.'.php');
- else
- // $_classes
- self::$_classes[$className]=$path.'.php';
- return $className;
- }
- // $alias 'system.web.*' * , include_path
- else // a directory
- {
- if(self::$_includePaths===null)
- {
- self::$_includePaths=array_unique(explode(PATH_SEPARATOR,get_include_path()));
- if(($pos=array_search('.',self::$_includePaths,true))!==false)
- unset(self::$_includePaths[$pos]);
- }
- array_unshift(self::$_includePaths,$path);
- set_include_path('.'.PATH_SEPARATOR.implode(PATH_SEPARATOR,self::$_includePaths));
- return self::$_imports[$alias]=$path;
- }
- }
- else
- throw new CException(Yii::t('yii','Alias "{alias}" is invalid. Make sure it points to an existing directory or file.',
- array('{alias}'=>$alias)));
- }
-
- YiiBase::autoload() :
-
- public static function autoload($className)
- {
- // $_coreClasses
- if(isset(self::$_coreClasses[$className]))
- include(YII_PATH.self::$_coreClasses[$className]);
- // $_classes
- else if(isset(self::$_classes[$className]))
- include(self::$_classes[$className]);
- else
- {
- // include_path , $className.'.php'
- include($className.'.php');
- return class_exists($className,false) || interface_exists($className,false);
- }
- return true;
- }
-
- import 。 Yii::import() 。
-
-
-
- Yii CComponent 、 、 , CComponent CModule (application components) 。
-
- IApplicationComponen , init() getIsInitialized() 。init() 。
-
- Yii , Yii::app()->user, Yii::app()->request 。 。
-
- Yii::app() (CWebApplication) ,CModule , 、 、 。
-
- , CModule __get() 。
-
- CModule $_components[] ($name => $object),$_componentConfig[] 。
-
- , $_componentConfig , ,CModule , init() 。
-
- Yii::app() CWebApplication CApplication :urlManager, request, session, assetManager, user, themeManager, authManager, clientScript, coreMessages, db, messages, errorHandler, securityManager, statePersister。
-
- components 。
-
- CModule , Yii::createComponent() 。
-
- createComponent() $config 。
-
-
-
- $config (config/main.php ) components :
-
- // application components
- 'components'=>array(
- 'log'=>array(
- 'class'=>'CLogRouter',
- 'routes'=>array(
- array(
- 'class'=>'CFileLogRoute',
- 'levels'=>'error, warning',
- ),
- ),
- ),
- 'user'=>array(
- // enable cookie-based authentication
- 'allowAutoLogin'=>true,
- ),
- ),
-
- $config components CApplication :
-
- $this->configure($config);
-
- configure() :
-
- public function configure($config)
- {
- if(is_array($config))
- {
- foreach($config as $key=>$value)
- $this->$key=$value;
- }
- }
-
- $config $_app setXXX() , 'components’ CWebApplication CModule setComponents() 。
-
- setComponents() 'components’ $_componentConfig[] :
-
- public function setComponents($components)
- {
- // $config ’components’
- foreach($components as $id=>$component)
- {
- if($component instanceof IApplicationComponent)
- $this->setComponent($id,$component);
- // $_componentConfig , $component
- else if(isset($this->_componentConfig[$id]))
- $this->_componentConfig[$id]=CMap::mergeArray($this->_componentConfig[$id],$component);
- // $_componentConfig
- else
- $this->_componentConfig[$id]=$component;
- }
- }
-
-
-
-
- CModule CComponent __get() , 。
-
- public function __get($name)
- {
- if($this->hasComponent($name))
- return $this->getComponent($name);
- else
- return parent::__get($name);
- }
-
- hasComponent() $_components[] , $_componentConfig[] 。
-
- public function hasComponent($id)
- {
- return isset($this->_components[$id]) || isset($this->_componentConfig[$id]);
- }
-
- getComponent() $_components[] , 。
- $_componentConfig[] Yii::createComponent() , $_components[] 。
-
- public function getComponent($id,$createIfNull=true)
- {
- if(isset($this->_components[$id]))
- return $this->_components[$id];
- else if(isset($this->_componentConfig[$id]) && $createIfNull)
- {
- $config=$this->_componentConfig[$id];
- unset($this->_componentConfig[$id]);
- if(!isset($config['enabled']) || $config['enabled'])
- {
- Yii::trace("Loading \"$id\" application component",'system.web.CModule');
- unset($config['enabled']);
- $component=Yii::createComponent($config);
- $component->init();
- return $this->_components[$id]=$component;
- }
- }
- }
-
-
-
- Yii::createComponent()
-
- public static function createComponent($config)
- {
- if(is_string($config))
- {
- $type=$config;
- $config=array();
- }
- else if(isset($config['class']))
- {
- $type=$config['class'];
- unset($config['class']);
- }
- else
- throw new CException(Yii::t('yii','Object configuration must be an array containing a "class" element.'));
-
- if(!class_exists($type,false))
- $type=Yii::import($type,true);
-
- if(($n=func_num_args())>1)
- {
- $args=func_get_args();
- if($n===2)
- $object=new $type($args[1]);
- else if($n===3)
- $object=new $type($args[1],$args[2]);
- else if($n===4)
- $object=new $type($args[1],$args[2],$args[3]);
- else
- {
- unset($args[0]);
- $class=new ReflectionClass($type);
- // Note: ReflectionClass::newInstanceArgs() is available for PHP 5.1.3+
- // $object=$class->newInstanceArgs($args);
- $object=call_user_func_array(array($class,'newInstance'),$args);
- }
- }
- else
- $object=new $type;
-
- foreach($config as $key=>$value)
- $object->$key=$value;
-
- return $object;
- }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
laravel에 yo에서 angularJs&coffeescript를 사용할 수 있도록 한다.먼저 yo 명령을 사용할 수 있어야하므로 아래에서 설치 global에 설치한 곳에서 laravel의 프로젝트 루트로 이동. 클라이언트 코드를 관리하는 디렉토리를 만들고 이동합니다. 클라이언트 환경 만들기 이것으로 히...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.