Home  >  Article  >  Backend Development  >  Three related problems encountered when using the Yii framework_PHP tutorial

Three related problems encountered when using the Yii framework_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 10:29:49920browse

The following are some of the experiences we gained when developing projects at Xinyi Network Company

Three problems encountered when using Yii framework

1. The problem of introducing global variables in the main.php file

Restore this problem: In the Yii framework, main.php is generally used as the configuration file of the entire application, saving various parameters of the Application and directly returning the array. During use, because the main.php file will be loaded in advance by Yii, some global operations are also placed in this file. There is no problem in loading some class operations. When a global variable is added once , and when using global to obtain global variables elsewhere, I found that no matter how hard I tried, I got NULL. After various attempts, I finally solved the problem by placing the imported location in the entry file index.php. What's the reason? Let’s reproduce Yii’s main.php file loading. The following code

index.php file:

class CApp {
public function __construct($config) {
$config = require($config);
}
}

$path = "main.php ";
$app = new CApp($path);

global $global;
var_dump($global);

main.php file:

$global = array(1, 2, 3);
return array();

Place the two files in the same directory and run index.php directly. The output $global is NULL. If we directly output $global in the constructor of CApp, the result will be output. What's the reason? Scope issue!

When we define a variable in the main.php file, although we want to use it as a global variable, when we require it in the local scope, it only exists as a local scope variable. We mentioned in TIPI that function calls are nested. Each nesting will have a scope. The variables in this scope are only valid currently. When the nesting ends, the variable life cycle ends.

Therefore, if we want to use the global variables in main.php as global variables for the entire application, we need to require the main.php file in the scope of the entry file.

2. The class_exists problem when introducing third-party extensions

Yii framework Yii provides the automatic loading function of classes based on the autoload mechanism of PHP5. The automatic loader is the static method autoload() of the YiiBase class. When new is used to create an object or access a static member of a class in the program, PHP passes the class name to the class loader, and the class loader completes the include of the class file. But if we introduce a third-party extension, and the naming rules of the third-party extension are different from Yii's, we will often see an error saying that require XXX file failed. If you search "yii framework class_exists" in google, you will find that the role of Yii framework Xue Qiang has answered that users can use a method similar to: class_exists('MyClass', false).

The class_exists function checks whether the class has been defined. If the class pointed to by class_name has been defined, this function returns TRUE, otherwise it returns FALSE. In the PHP kernel, this function will search whether the class pointed to by class_name exists in the current class table. All classes will be converted to lowercase before searching, so they will not be case-sensitive. The second parameter refers to whether to use autoload. The default is to use it. At this time, the class_exists function will first execute autoload, and then check whether the class pointed to by class_name in the class table exists after executing autoload. So we can bypass autoloading by setting the second parameter to FALSE.

This may solve the problem, but what if we are using third-party code that cannot be modified? what to do? I simply hacked it myself and loaded the required classes before calling the third-party operation.

Later, another solution was adopted: directly using the second parameter of Yii:import to force the entire directory to be loaded.

3. Yii error log

I won’t go into details about the problem. I just moved the configuration of the production environment to the development environment, so the error can no longer be seen. After adjusting the log rules, it was OK.

Yii’s processing of error logs relies on PHP’s set_error_handler function and set_exception_handler function. These two functions are handled in the initSystemHandlers method of CApplication.

This article is published by Xinyi Network, which specializes in website construction in Chengdu. For more information about yii, please pay attention to Xinyi Network’s subsequent releases. Xinyi Network’s official website is http://www.ir58.com

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/770157.htmlTechArticleThe following are some of the experiences we encountered when developing projects at Xinyi Network Company using the Yii framework Three questions 1. The problem of introducing global variables in the main.php file is restored...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn