实体类中构造函数的疑问

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实体类中构造函数的疑问相关的知识,希望对你有一定的参考价值。

public class Category

/// <summary>
/// 无参构造方法
/// </summary>
public Category()

/// <summary>
/// 数据库非空字段的构造方法
/// </summary>
public Category(int id,string name)

this.id = id;
this.name = name;


private string name;
public string Name

get return name;
set name = value;


private int id;
public int Id

get return id;
set id = value;



public class Category

private string name;
public string Name

get return name;
set name = value;


private int id;
public int Id

get return id;
set id = value;


第一个实体类有构造函数,第二类没有。请问有没有构造函数对实体类有什么影响啊?

你的理解是错的,第二个类不是没有构造函数!如果类中没有自定义的构造函数,则会默认提供一个无参的构造函数。如上面你的第二个类,默认有一个构造函数:
public Category()


因此,如果没有自定义也会有一个函数。这时你可以这样创建一个实体对象:
Category category = new Category();
但是注意:一旦提供了自定义的构造函数,就不会有默认的构造函数。如上面第一个类,你就不能像上面那样创建对象(此时没有无参的构造函数),而必须在创建对象的时候传入必须的参数。
通常来说,不提供自定义的构造函数没有太大的影响。提供构造函数主要用于初始化实体属性(非绝对)。
通常,我们在创建对象的时候会提供一个无参的构造函数,在提供一些构造函数的重载,这样,我们就可以根据需要创建理想的实体对象。
祝你学习愉快!
参考技术A 没有的话 系统会自动创建 但是看不到 没有什么大的影响 如果有带参的构造函数 必须要写无参的构造函数 构造函数主要就是初始化实例用的 带参的构造函数就是在初始化的时候比较方便 参考技术B 看需要了,我觉得没什么影响。
这么说吧,有构造函数时,new一个实体可能直接就给他的一些属性赋值了,而没有构造函数的话他的属性都需要你去赋值
参考技术C 没影响 有了构造 你可以在实例化化类的时候 执行一些方法 比如赋值之类的 参考技术D 没有,会自动生成默认的构造类

PHP中的构造函数

【中文标题】PHP中的构造函数【英文标题】:Constructor in PHP 【发布时间】:2017-08-13 05:50:40 【问题描述】:

PHP 中的构造方法是否接受类中声明的参数?

我在多个网站和书籍以及 PHP 文档中看到函数函数 __construct() 不带任何参数。

【问题讨论】:

__construct 可以采用与任何其他方法相同的参数。 你一定是读错了书籍和文档——构造函数可以使用你定义的任意数量的参数 如有疑问 - 只需阅读官方文档中的此类内容,而不是依赖第三方资源。 php.net/manual/en/language.oop5.decon.php 其实我想知道你所说的“类中声明的参数”是什么意思......一个类没有声明的参数,只有方法(函数)有。构造函数就是这样一种方法。它将接受在其实现中声明的任何参数。 【参考方案1】:

__construct 可以带参数。根据the official documentation,这个方法签名是:

void __construct ([ mixed $args = "" [, $... ]] )

看来它可以带参数!

使用方法:

class MyClass 
    public function __construct($a) 
        echo $a;
    


$a = new MyClass('Hello, World!'); // Will print "Hello, World!"

【讨论】:

【参考方案2】:

PHP 构造函数可以像其他函数一样接受参数。 __construct()函数不需要加参数,例如:

示例 1:无参数

<?php
class example 
    public $var;
    function __construct() 
        $this->var = "My example.";
    


$example = new example;
echo $example->var; // Prints: My example.
?>

示例 2:带参数

<?php
class example 
    public $var;
    function __construct($param) 
        $this->var = $param;
    


$example = new example("Custom parameter");
echo $example->var; // Prints: Custom parameter
?>

【讨论】:

以上是关于实体类中构造函数的疑问的主要内容,如果未能解决你的问题,请参考以下文章

PHP中的构造函数

我们啥时候需要 C++ 中的私有构造函数?

Flutter 6种构造函数详解

抽象类可继承实体类(要有明确的构造方法),这句话该怎么理解?

具体类中的受保护构造函数与抽象类中的公共构造函数

Java 构造函数(抽象类中的构造函数) 和 加载