1. 函数参数错误是什么意思
1:是不是使用第三方平台的功能,如果你的程序功能是没有问题的,那就在权限设置那里把你的第三方平台的域名加入获取用户那里。
2:你注册用的是普通邮箱的话是不行的,应该登陆一个QQ号码,用这个QQ邮箱注册,而这个QQ号码要没有注册过私人微信,如果没有没用过的QQ号就重新申请一个吧,因为微信是基于QQ平台的,所以没有关联QQ号的邮箱是不行的,提交会出现参数错误。
2. 函数的参数可以是错误值
:硬盘初始化函数不正确的办法是因为之前的硬盘装有系统并且损坏了,先备份那个硬盘里的数据,然后再修复那个硬盘。
选用[/4]参数,在1.2MB的高密度软驱中伯格式化360KB的低密度盘;选用[/Q]参数,快速格式化,这个参数并不会重新划分磁盘的磁道和扇区,只能将磁盘根目录、文件度分配表以及引导扇区清成空白,因此,格式化的速度较快。
3. 函数参数类型错误
出现错误时通常有一些错误值,各个错误值代表不同的含义,每个错误值都有不同的原因和解决方法。
1.####错误 此错误表示列不够宽,或者使用了负日期或时间. 当列宽不足以显示内容时,可以通过以下几种办法纠正: (1)调整列宽,或直接双击列标题右侧的边界. (2)缩小内容以适应列宽. (3)更改单元格的数字格式,使数字适合现有单元格宽度.例如,可以减少小数点后的小数位数. 当日期和时间为负数时,可以通过以下几种方法纠正: (1)如果使用的是1900日期系统,那么日期和时间必须为正值. (2)如果对日期和时间进行减法运算,应确保建立的公式是正确的. (3)如果公式是正确的,但结果仍然是负值,可以通过将相应单元格的格式设置为非日期或时间格式来显示该值.
2.#VALUE!错误 此错误表示使用的参数或操作数的类型不正确.可能包含以下一种或几种错误: (1)当公式需要数字或逻辑值(例如TURE或FALSE)时,却输入了文本. (2)输入或编辑数组公式,没有按组合键Ctrl+Shift+Enter,而是按了Enter键. (3)将单元格引用、公式或函数作为数组常量输入. (4)为需要单个值(而不是区域)的运算符或函数提供区域. (5)在某个矩阵工作表函数中使用了无效的矩阵. (6)运行的宏程序所输入的函数返回#VALUE!
3.#DIV/0!错误 这种错误表示使用数字除以零(0).具体表现在: (1)输入的公式中包含明显的除以零的计算,如"=5/0". (2)使用了对空白单元格或包含零作为除数的单元格的单元格引用. (3)运行的宏中使用了返回#DIV/0!的函数或公式.
4.#N/A错误 当数值对函数或公式不可用时,将出现此错误.具体表现在: (1)缺少数据,在其位置输入了#N/A或NA(). (2)为HLOOKUP、LOOKUP、MATCH或VLOOKUP工作表函数的lookup_value参数赋予了不正确的值. (3)在未排序的表中使用了VLOOKUP、HLOOKUP或MACTCH工作表函数来查找值. (4)数组公式中使用的参数的行数或列数与包含数组公式的区域的行数或列数不一致. (5)内置或自定义工作表函数中省略了一个或多个必需参数. (6)使用的自定义工作表函数不可用. (7)运行的宏程序所输入的函数返回#N/A.
5.#NAME?错误 当Excel2007无法识别公式中的文本时,将出现此错误.具体表现在: (1)使用了EUROCONVERT函数,而没有加载"欧元转换工具"宏. (2)使用了不存在的名称. (3)名称拼写错误. (4)函数名称拼写错误. (5)在公式中输入文本时没有使用双引号. (6)区域引用中漏掉了冒号. (7)引用的另一张工作表未使用的单引号引起. (8)打开调用用户自定义函数(UDP)的工作薄.
6.#REF!错误 当单元格引用无效时,会出现此错误.具体表现在: (1)删除了其他公式所引起的单元格,或将已移动的单元格粘贴到了其他公式所引起的单元格上. (2)使用的对象链接和嵌入链接所指向的程序未运行. (3)链接到了不可用的动态数据交换(DDE)主题,如"系统". (4)运行的宏程序所输入的函数返回#REF!.
7.#NUM!错误 如果公式或函数中使用了无效的数值,则会出现此错误.具体表现在: (1)在需要数字参数的函数中使用了无法接受的参数. (2)使用了进行迭代的工作表函数(如IRR或RATE),且函数无法得到结果. (3)输入的公式所得出的数字太大或太小,无法在Excel2007中表示.
8.#NULL!错误 如果指定了两个并不相相交的区域的交点,则会出现错误.具体表现在: (1)使用了不正确的区域运算符. (2)区域不相交. 提示:引用之间的交叉运算符为空格.
4. 函数参数默认值设置错误的是
一、函数的基本语法
语法
function functionName(类型限定 参数列表) : 返回值类型
{
}
案例:计算两个数之和。
function sum (int $a, int $b) : string
{
return $a + $b;
}
echo sum(1, 2); // 3
二、函数的分类
2.1 命名函数
命名函数自动提升到脚本顶部,在全局任何地方都能调用。
// 按函数名称调用
demo1('残破的蛋蛋');
// 声明一个demo1函数
function demo1($name) {
echo "My name is ${name}.";
}
以上代码会输出:My name is 残破的蛋蛋.
2.2 匿名函数
没有指定具体函数名称的函数叫匿名函数,也叫闭包函数。
$var = function () {
// TODO
}
以上声明的就是一个匿名函数,它需要把函数赋给一个变量,然后通过变量去调用。
$demo2 = function () {
echo "Hello World!";
}
$demo2(); // Hello World!
匿名函数通过变量调用,以上结果为:Hello World!。
三、函数的参数
3.1 必选参数
function person1 (string $name) : string
{
return "Hello, ${name}!";
}
echo person1('残破的蛋蛋')."<br>"; // Hello, 残破的蛋蛋!
echo person1(123)."<br>"; // Hello, 123!
echo person1(true)."<br>"; // 报错
上述第三次函数调用报错的原因是:当限定了传入的参数类型为字符串时,标量(单值)会自动转换成字符串,但是布尔型、数组、类是无法自动转换的。
3.2 可选参数
在定义函数的时候声明了参数,如果在调用的时候没有指定参数或者是少指定了参数,那么就会出现缺少参数的报错。在PHP中,支持函数的默认方式调用,即为函数的参数指定一个默认值,在调用函数的过程中如果没有指定参数的值,那么在函数中会使用参数的默认值。
function person2 (string $name, int $age = 20, string $sex = "男") {
echo "我的名字是:${name},年龄:${age}岁,性别:${sex}。<br>";
}
// 我的名字是:残破的蛋蛋,年龄:20岁,性别:男。
person2('残破的蛋蛋');
在上述案例中我们确实为person2()函数声明了三个参数,但是我们只传了一个参数,其他两个参数都使用的是默认值。当调用函数传参的过程中,实参和形参是按照参数传递的顺序一一对应的,如果实参个数少于形参,则后面的形参不会被传值。当使用默认参数时,必须放在非默认参数的后面,否则可能会导致函数不会按照预期的执行。
3.3 不定参数
语法
function functionName (...$args) {
// TODO
}
function person3 () {
// 获取传递给函数的所有变量数组
$args = func_get_args();
// 遍历每一个传入的参数
foreach ($args as $key => $arg) {
$num = $key + 1;
echo "第${num}个参数是:${arg}<br>";
}
}
person3('残破的蛋蛋', 30, '男');
// 第1个参数是:残破的蛋蛋
// 第2个参数是:30
// 第3个参数是:男
从PHP5.6以后,可以不使用func_get_args()函数获取可变参数,使用“…”运算符来实现可变长度的函数。
function person4 (...$args) {
print_r($args);
}
person4('残破的蛋蛋', 30, '男'); // Array ( [0] => 残破的蛋蛋 [1] => 30 [2] => 男 )
这是一个非常实用的功能,当一个函数的参数过多时,可以不用逐一地传递参数,实用可变参数就可以传参了。
四、函数的返回值
通常情况下,函数只允许有一个返回值,原则是“单值”返回的,如果想返回多值怎么办?那么只能在返回值的类型上打主意了,可以通过以下方法来操作。
4.1 返回一个数组
function success () : array
{
return ['status' => 1, 'message' => '验证成功'];
}
$res = demo1();
echo $res['status'] ? $res['message'] : '验证失败!'; // 验证成功!
4.2 返回一个对象
function user () : object
{
return new class () {
public $name = 'admin';
public $email = 'admin@abc.cn';
};
}
$user = user();
printf("name = %s,email = %s", $user->name, $user->email); // name = admin,email = admin@abc.cn
4.3 序列化字符串
4.3.1 php内置的序列化函数
如果有一些数据需要进行网络传输或保存到文件或数据表中的时候要用到序列化函数。如果这个序列化的数据只在php程序中使用,应该使用php内置的方法就可以了。
function result() : string
{
return serialize(['status' => 1, 'message' => '验证成功']);
}
echo result(); // a:2:{s:6:"status";i:1;s:7:"message";s:12:"验证成功";}
在php中使用时要还原成原来的类型,也就说反序列化:
$arr = unserialize($str);
print_r($arr); // Array ( [status] => 1 [message] => 验证成功 )
4.3.2 JSON格式字符串
将数据转为通用的JSON格式字符串,这样的话就可以与其他语言进行数据交换了,例如:JS,JAVA…
function demo4() : string
{
// JSON_UNESCAPED_UNICODE 显示中文,否则显示的是编码过的中文字符
// \u9a8c\u8bc1\u6210\u529f
return json_encode(['status' => 1, 'message' => '验证成功'], JSON_UNESCAPED_UNICODE);
}
$str = demo4();
echo $str; // {"status":1,"message":"验证成功"}
如果当前脚本接收到一个前端或其它接口发送过来的json格式的数据,可以使用json_decode进行解析。解析的目的是将外部的json还原成php能够处理的数据类型。
$res = json_decode($str);
// 默认将外部的JSON解析成Object类型。
var_dump($res);
printf('status = %d, message = %s<hr>',$res->status, $res->message);
结果:
如果不用对象的方式访问,也可以给json_decode()函数传入第二个参数:true。
$res = json_decode($str, true);
printf('status = %d, message = %s<hr>',$res['status'], $res['message']);
结果:
五、函数的作用域
在JS中作用域有三种:全局、函数、块作用域,而在PHP中,只有全局和函数一种作用域。
全局变量也称为外部变量,是定义在函数外部的。它的作用域从变量定义处开始。
$name = '残破的蛋蛋'; // 声明一个$name的全局变量
$email = '826350863@qq.com'; // 声明一个$email的全局变量
// 声明一个user函数
function user () {
echo "我的名字是:${name},邮箱是:${email}";
}
// 调用函数
user();
结果:
以上结果我们发现报错了,这是因为在上面的代码中,在函数user()外面声明了两个全局变量$name和$email,但是在PHP中,不能直接在函数中使用全局变量,所以在user()函数中使用的变量$name和$email相当于新声明的两个变量,并且没有被赋值,是两个空值,所以会报错。
在函数中如果要使用全局变量可以使用global关键字或者$GLOBALS关键字。如下所示:
function user1 () {
// 在函数内部使用global关键字引入全局变量,多个变量之间用逗号隔开
global $name, $email;
echo "我的名字是:${name},邮箱是:${email}";
}
user1(); // 我的名字是:残破的蛋蛋,邮箱是:826350863@qq.com
function user2 () {
// 在函数内部使用global关键字引入全局变量,多个变量之间用逗号隔开
echo "我的名字是:{$GLOBALS['name']},邮箱是:{$GLOBALS['email']}";
}
user2();
以上两个函数user1()和user2()都可以正常的输出结果:我的名字是:残破的蛋蛋,邮箱是:826350863@qq.com。
在$GLOBALS数组中,每一个变量都是一个元素,变量名就是它的键名,变量值就是对应的键值。$GLOBALS是一个超全局变量。
六、闭包
匿名函数就是闭包(官方手册写的),闭包可以访问函数外部的自由变量/父级作用域的变量。
$demo2 = function () use ($name, $email) {
return sprintf('name = %s<br>email = %s', $name, $email);
};
echo $demo2();
结果
闭包支持引用传参:参数前加&,示例如下:
echo "当前name的值是:${name}<br>";
$demo3 = function ($myName) use (&$name) {
// 闭包中将引用参数更新后,会实时映射到外部的原始参数中
$name = $myName;
echo "现在name的值是:${name}<br>";
};
echo $demo3('拤碎的蛋蛋');
// 输出:
// 当前name的值是:残破的蛋蛋
// 现在name的值是:拤碎的蛋蛋
结果
闭包use禁止使用以下三种参数:
超全局不让用$_GET
$this
与当前参数重名不让用
闭包经常用作函数的返回值,示例如下:
// 闭包经常用作函数的返回值
function demo4 ($site) {
return function ($color) use ($site) {
return sprintf('<h3 >%s</h3>', $color, $site);
};
}
第一种调用方式:
var_dump(demo4('PHP中文网'));
$closure = demo4('PHP中文网');
echo $closure('red');
第二种调用方式:
// 通过高阶函数调用:柯里化
echo demo4('PHP中文网')('red');
结果:
七、回调函数
回调函数是指调用函数时传递的不是一个标准的变量,而是将另外一个函数作为参数传递到调用的函数中。
call_user_func_array()调用回调函数,并把一个数组作为回调函数的参数。
语法:
call_user_func_array ( callable $callback , array $param_arr ) : mixed
案例
class Person {
// 实例方法
public function getName(string $name) : string
{
return "My name is ${name},";
}
public static function age(int $age): string
{
return "年龄是:${age}岁。";
}
}
// 调用实例方法
// 注意,这里必须是要实例化的,除非是static
$str = call_user_func_array(['Person', 'getName'], ['残破的蛋蛋']);
// 调用静态方法
$str .= call_user_func_array(['Person', 'age'], [18]);
// 下面的用法跟上面相同
// $str .= call_user_func_array('Person::age', [18]);
echo $str; // My name is 残破的蛋蛋,年龄是:18岁。
八、静态变量
通常函数中的变量随着函数的调用结束就会自动销毁了,通过下面的案例我们可以得出这个结论:
function demo1 () {
$i = 1;
echo "$i <br>";
$i++;
}
demo1(); // 1
demo1(); // 1
demo1(); // 1
demo1(); // 1
以上代码,无论调用多少次demo1()函数结果都是输出1,说明在第2、3、4次调用函数中并没有执行到$i++,每次函数调用都是从$i = 1开始的。
如果我们想要让结果保留到下次调用,那么就需要使用到静态变量了,示例如下:
function demo2 () {
static $i = 1;
echo "$i <br>";
$i++;
}
demo2(); // 1
demo2(); // 2
demo2(); // 3
demo2(); // 4
以上结果分别输出了1、2、3、4,说明函数中的静态变量不会随函数调用结束而消失,而是进入到了下一次的函数调用中,这种场景可以应用在函数的多次调用中的数据共享/数据通信。
5. 啥叫参数错误
参数错误一般表现为相关数据不能正常使用或得到,从而无法得到相应的应答,最后用于提醒用户参数错误。也可能是提问过期或者被删除。解决办法:无论是软件还是网页出现这种错误的时候,都要检查一下,传输数据是否正确,代码是否正常,有无冲突。
6. 关于函数,方法参数错误的是
遇到不适当的参数最近 做的项目,客户端 运行很长时间的时候,会出现提示对话框 遇到不适当的参数. 确定后 所有控件都没有办法重绘(会继续弹出 相同对话框).环境:客户端 : VS2008 +Xtream + directShow疑是制作的 播放器 打开时 会遇到相似问题.因为 问题难以重现,但是出现频率不低,望大侠不吝赐教.------解决方案--------------------------------------------------------内存是否泄露,GDI对像是否一直在涨关键函数的返回值写到LOG里看看------解决方案--------------------------------------------------------是不是资源耗尽,或者其他错误,多打印log等来分析问题------解决方案----------------------------------------
- 相关评论
- 我要评论
-