我正在阅读此文档:
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()
)?
答案 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中getters
和setters
的概念。 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