php data classes?



我从C#中学习了大部分OOP实践,并主要在MVC中编码php,但没有针对数据类型的自定义对象(用户信息等我主要存储在关联数组中)。我想把我在C#中学到的东西(基本上是制作结构或数据类,用来存储特定类型的数据,比如用户记录,或者说文章的信息)放到php中。这样,我就可以准确地知道期望的数据值(因为它们是定义的字段,而不仅仅是添加到数组中),从而允许在控制器和视图之间进行更多的抽象。

在php中,特别是在MVC设计模式中,有没有某种方法可以做到这一点?我很好奇应该把这些新的"数据类型"的定义放在哪里。
还是我只是错误地思考了这个问题,有更好的方法可以做到?

编辑:我试图实现的C#示例:

class program1
{
    public void main ()
    {
        Article randomArticle = getArticle (); //instead of returning an object array, it returns a defined data type with predefined fields, so I don't need to guess what's there and what isn't
        Console.WriteLine(randomArticle.title);
        Console.ReadLine();
    }
    public Article getArticle ()
    {
        return new Article("Sometitle", "SomeContent");
    }
}
struct Article
{
    public Title {get; private set;}
    public Content {get; private set;}
    public Article (string title, string content)
    {
        this.Title = title;
        this.Content = content;
    }
}

(idk,如果上面的内容真的会编译,但它为您提供了我在PHP中尝试做的事情的要点)

PHP没有任何您想要实现的逻辑。IMO,确保data-types导致了一个验证领域。我想让你检查几个条款,这将给你所需的一切。

  1. 类型铸造/杂耍[此处文档]

    铸造可能是阻止不必要输入的最快方法。允许的铸造有:

    • (int),(integer)-强制转换为integer
    • (bool),(boolean)-强制转换为boolean
    • (float)、(double)、(real)-转换为float
    • (string)-强制转换为字符串
    • (array)-强制转换为数组
    • (object)-强制转换为object
    • (unset)-强制转换为NULL(PHP 5)
  2. PHP过滤器

    PHP有一个函数filter_var(http://www.php.net/manual/en/function.filter-var.php)将帮助您比较数据类型

    var_dump(filter_var('bob@example.com', FILTER_VALIDATE_EMAIL));
    var_dump(filter_var('http://example.com', FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED));
    
  3. PHP内置()函数

    php中有许多函数,可以帮助您检查数据类型

    • is_array():检查数组
    • is_integer():检查整数
    • is_object():检查对象
    • is_float():检查浮点数
    • ctype_digit():检查整数

    以及更多

  4. Regex验证

    你可以在互联网上找到很多关于这方面的资源。


其他资源

  • http://net.tutsplus.com/tutorials/php/sanitize-and-validate-data-with-php-filters/
  • http://www.phpro.org/tutorials/PHP-Type-Casting.html

更新

你上面的方法可能会变成这样的

public function Article($title, $content) {
    if(is_string($title)) { $this -> title = $title; }
    if(is_string($content)) { $this -> content = $content; }
}

在PHP中,您可以自由地编写自己的系统来实现MVC。不过,我建议不要自己动手,而是考虑使用现有的系统。我们php类型有一个巨大的生态圈,并且有着悠久的历史。根据一些观点,PHP比一个更年轻、发展更快的C#更成熟。它也更简单,这很好。不过,具体来说:我推荐CakePHP。Drupal更健壮。还有曾德。Zend的优势是从编辑器到服务器优化和安全的端到端解决方案。

p.s.c#更像mvvm

编辑:代码示例

class Article {
    protected $_title;
    protected $_content;
    public function setTitle( $title ) {
        $this->_title = $title;
    }
    public function setContent( $content ) {
        $this->_content = $content;
    }
    public function getTitle() {
        return $this->_title;
    }
    public function getContent() {
        return $this->_content;
    }
    /* magic not advisable; a technically valid technique, though it can lead to problems
    public function __get( $property ) {
        switch( $property ) {
            case 'title': return $this->_title; break;
            case 'content': return $this->_content; break;
            default: break;
        }
    }
    */
}

最新更新