繁体   English   中英

从PHP中的另一个类调用方法

[英]Calling method from another class in php

我正在阅读此文档:

http://www.yiiframework.com/doc-2.0/guide-input-file-upload.html

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

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();

但是在后一种情况下,调用该方法的类是否一定要从该方法所属的类扩展呢?

saveAs()函数属于yii \\ web \\ Uploadedfile类。 我们如何用上述方式( $this->imageFile->saveAs() )来称呼它?

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

如果使用XAMPP ,则在htdocs这样的Web可访问目录中有2个文件

One.php

<?php
// One.php

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

    public function test_two()
    {
        var_dump($this->one_p);
    }
}

Two.php

<?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();

现在在浏览器中运行Two.php并观察结果,它是string(10) "hello prop"

现在注释$one_obj->one_p = 'hello prop'; 行并观察结果,为NULL

因此,我们可以得出结论,一旦设置了属性(变量),就可以全局访问它。 这是PHP OOP中的getterssetters的概念。 请在这里参考。 您不需要像在函数中那样在参数中传递它

以Yii为例

$one_obj->one_p = 'hello prop';

就像下面

$one_obj->one_p = new Someclass;  // here Someclass should be 'require' at the begining of file

所以在这里您可以访问Someclass所有属性和方法,例如$one_obj->one_p->somemethod();

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

并且getInstance()返回一个对象您可以将需要存储的任何内容存储在one_p例如int,float,数组,资源,对象……希望您能得到它。

Yii是一个非常好的PHP框架,完全以OOP风格编码,没有以程序风格编码,而是采用MVC架构。 您将享受更多,只需通过这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM