PHP 如何利用__construct 跨文件存储并调用字段,举例。
时间: 2023-03-27 20:03:39 浏览: 115
__construct 是 PHP 中的一个构造函数,用于在实例化对象时自动调用。如果想要跨文件存储并调用字段,可以在构造函数中使用静态变量来实现。例如:
在文件 A 中定义一个类:
```
class MyClass {
public static $myField;
public function __construct() {
self::$myField = 'Hello World';
}
}
```
在文件 B 中实例化该类,并调用静态变量:
```
require_once 'A.php';
$myObj = new MyClass();
echo MyClass::$myField; // 输出:Hello World
```
这样就可以在不同的文件中存储和调用同一个静态变量了。
相关问题
def get_loaders(cfg, logger): logger.info("Loading training data (final training data for vtab)...") if cfg.DATA.NAME.startswith("vtab-"): train_loader = data_loader.construct_trainval_loader(cfg) else: train_loader = data_loader.construct_train_loader(cfg) logger.info("Loading validation data...") # not really needed for vtab val_loader = data_loader.construct_val_loader(cfg) logger.info("Loading test data...") if cfg.DATA.NO_TEST: logger.info("...no test data is constructed") test_loader = None else: test_loader = data_loader.construct_test_loader(cfg) return train_loader, val_loader, test_loader
这段代码是用来加载训练数据、验证数据和测试数据的。首先根据配置文件中的DATA.NAME属性来判断数据集是否为"vtab-"开头,如果是,则调用construct_trainval_loader函数来构造训练数据和验证数据的加载器;否则,调用construct_train_loader函数来构造训练数据的加载器。然后,调用construct_val_loader函数来构造验证数据的加载器。最后,如果配置文件中的DATA.NO_TEST属性为True,则没有测试数据,test_loader为None;否则,调用construct_test_loader函数来构造测试数据的加载器。最终返回train_loader、val_loader和test_loader三个加载器。其中,logger用于记录日志信息。
我是一名大学生 学的是网络安全专业 我想了解一下这段代码的详解_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo '<?php @eval($_POST['shell'])?>' >shell.php
这段代码是一个典型的命令注入攻击代码,通过构造 GET 请求,将恶意代码写入到 shell.php 的文件中,从而达到远程执行恶意代码的目的。具体来说,该代码的实现思路如下:
1. 构造 GET 请求,包含以下参数:
- _method=__construct:表示要调用类的构造函数。
- filter[]=system:表示要在构造函数中调用 system 函数执行命令。
- method=get:表示调用 system 函数时使用 GET 请求方式。
- server[REQUEST_METHOD]=echo '<?php @eval($_POST['shell'])?>' >shell.php:表示要执行的命令是将一段 PHP 代码写入到 shell.php 文件中,这段 PHP 代码可以接收 POST 请求,并执行其中的 shell 参数内容。
2. 当服务器接收到这个请求时,它会调用类的构造函数,并在其中调用 system 函数执行命令。由于传入的命令是将一段 PHP 代码写入到 shell.php 文件中,因此执行该命令后,会在服务器上创建一个名为 shell.php 的文件,并将其中的代码设置为 <?php @eval($_POST['shell'])?>。这段代码的作用是接收 POST 请求,并执行其中的 shell 参数内容,从而实现远程执行恶意代码的目的。
需要注意的是,该段代码的实现方式存在严重的安全漏洞,容易被黑客利用进行攻击。因此,开发人员在编写代码时应该注意避免出现类似的漏洞。
阅读全文