Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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中从另一个类调用方法_Php_Oop_Yii2 - Fatal编程技术网

在php中从另一个类调用方法

在php中从另一个类调用方法,php,oop,yii2,Php,Oop,Yii2,我正在阅读以下文档: 这是指南中建议的示例模型 namespace app\models; use yii\base\Model; use yii\web\UploadedFile; class UploadForm extends Model { /** * @var UploadedFile */ public $imageFile; public function rules() { return [

我正在阅读以下文档:

这是指南中建议的示例模型

namespace app\models;

use yii\base\Model;
use yii\web\UploadedFile;

class UploadForm extends Model
{
    /**
     * @var UploadedFile
     */
    public $imageFile;

    public function rules()
    {
        return [
            [['imageFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg'],
        ];
    }

    public function upload()
    {
        if ($this->validate()) {
            $this->imageFile->saveAs('uploads/' . $this->imageFile->baseName . '.' . $this->imageFile->extension);
            return true;
        } else {
            return false;
        }
    }
}
我不明白的是,在上面的upload()函数中如何调用saveAs()方法:

 $this->imageFile->saveAs('uploads/' . $this->imageFile->baseName . '.' . $this->imageFile->extension);
根据我所知的一点php,方法要么静态调用,如下所示:

UploadedFile::saveAs(..., ...);
$this->saveAs();
或者像这样非静态地:

UploadedFile::saveAs(..., ...);
$this->saveAs();
但在后一种情况下,调用该方法的类不能从该方法所属的类扩展吗


saveAs()函数属于yii\web\Uploadedfile类。我们怎样才能用上面提到的方式来称呼它(
$this->imageFile->saveAs()
)?

考虑以下PHP中基本OOP概念的示例

如果使用
XAMPP

One.php

<?php
// One.php

/**
 *
 */
class One
{
    public $one_p;
    // function __construct(argument)
    // {
    //     # code...
    // }

    public function test_two()
    {
        var_dump($this->one_p);
    }
}
<?php
// Two.php
require 'One.php';
/**
 *
 */
class Two
{

    // function __construct(argument)
    // {
    //     # code...
    // }

    public function test_one()
    {
        $one_obj = new One;
        $one_obj->one_p = 'hello prop';
        $one_obj->test_two();
    }
}

$two_obj = new Two;
$two_obj->test_one();
就像下面一样

$one_obj->one_p = new Someclass;  // here Someclass should be 'require' at the begining of file
因此,您可以在这里访问
Someclass
like的所有属性和方法
$one_obj->one_p->somemethod()

由于
getInstance()
UploadFile
的静态方法,您可以在不创建对象的情况下调用它

并且
getInstance()
返回一个对象 您可以将需要存储的任何内容存储在
one\p
中,如int、float、array、resource、object。。。 希望你收到了


Yii是一个非常优秀的PHP框架,完全以OOP风格编码,而不是过程式编码,采用MVC架构。您将更喜欢它,只需浏览一下PHP中的以下基本OOP概念示例

如果使用
XAMPP

One.php

<?php
// One.php

/**
 *
 */
class One
{
    public $one_p;
    // function __construct(argument)
    // {
    //     # code...
    // }

    public function test_two()
    {
        var_dump($this->one_p);
    }
}
<?php
// Two.php
require 'One.php';
/**
 *
 */
class Two
{

    // function __construct(argument)
    // {
    //     # code...
    // }

    public function test_one()
    {
        $one_obj = new One;
        $one_obj->one_p = 'hello prop';
        $one_obj->test_two();
    }
}

$two_obj = new Two;
$two_obj->test_one();
就像下面一样

$one_obj->one_p = new Someclass;  // here Someclass should be 'require' at the begining of file
因此,您可以在这里访问
Someclass
like的所有属性和方法
$one_obj->one_p->somemethod()

由于
getInstance()
UploadFile
的静态方法,您可以在不创建对象的情况下调用它

并且
getInstance()
返回一个对象 您可以将需要存储的任何内容存储在
one\p
中,如int、float、array、resource、object。。。 希望你收到了


Yii是一个非常优秀的PHP框架,完全以OOP风格编码,而不是过程式编码,采用MVC架构。您会更喜欢它,只需执行

rules()命令系统将上载对象存储在
$this->imageFile
中即可。一旦上传被内部处理,你只需要在其中有一个对象,并可以调用它的方法。我们如何从该模型类“$this->saveAs()”中的另一个类(yii\web\UploadedFile)调用方法?尤其是当此文件不是从yii\web\UploadedFile扩展时!没有
$this->saveAs()
。有
$this->imageFile->saveAs()
,因为在处理规则时,上载的文件对象被放入了
$this->imageFile
中。您能在回答中详细说明一下吗?我已经阅读了yii\base\Model中的rules()和vaildate()方法,但不理解uploadedfile对象是如何放置在imageFile属性中的。这是您要查找的行:
$Model->imageFile=uploadedfile::getInstance($Model,'imageFile')
在控制器()中调用
$Model->upload()
之前
$this->imageFile
将保存一个带有
saveAs()
方法的实例。rules()基本上告诉系统将上载对象存储在
$this->imageFile
中。一旦上传被内部处理,你只需要在其中有一个对象,并可以调用它的方法。我们如何从该模型类“$this->saveAs()”中的另一个类(yii\web\UploadedFile)调用方法?尤其是当此文件不是从yii\web\UploadedFile扩展时!没有
$this->saveAs()
。有
$this->imageFile->saveAs()
,因为在处理规则时,上载的文件对象被放入了
$this->imageFile
中。您能在回答中详细说明一下吗?我已经阅读了yii\base\Model中的rules()和vaildate()方法,但不理解uploadedfile对象是如何放置在imageFile属性中的。这是您要查找的行:
$Model->imageFile=uploadedfile::getInstance($Model,'imageFile')
在控制器()中调用
$Model->upload()
之前
$this->imageFile
将保存一个带有
saveAs()
方法的实例。回答得很好!我将根据你的话问一个新问题,“因为getInstance()是上传文件的静态方法,你可以调用它而不创建对象。”我将在这篇评论中发布链接,所以请抽出一些时间来回答。回答得好!我将根据您的行问一个新问题,“因为getInstance()是UploadFile的静态方法,您可以调用它,而无需创建对象。”我将在这篇评论中发布链接,请您抽出一些时间回答。