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

时间:2016-02-11 14:28:22

标签: php oop yii2

我正在阅读此文档:

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

1 个答案:

答案 0 :(得分:1)

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

如果使用htdocs

,则在XAMPP中的网络可访问目录中有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的概念。 Please refer here.你不需要在函数

中按需要传递它

在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,array,resource,object ... 希望你明白了。

Yii是一个非常精细的PHP框架,完全用OOP风格编码,没有以程序风格编码,引人入胜的MVC架构。您将更喜欢它,只需浏览here