FunctionTest

package java基础知识.小结与练习;

/*
函数的应用

自定义函数的时候要明确两点:
	1:明确结果 对应的就是明确返回值的类
	2:明确参数 就是这个函数需不需要有未知内容参与,如果有,就要定义变量。
		明确参数的类型。
		明确参数的个数。
*/
class FunctionTest 
{
	//主函数测试自定义函数是否正确
	public static void main(String[] args) 
	{
		int a = 3,b = 4;
		System.out.println("a+b="+sum(a,b));

		System.out.println("----------------------");
		System.out.println("a和b中较大的数是:"+max(a,b));

		System.out.println("----------------------");
		/*
		for(int x=1; x<=3; x++)
		{
			for(int y=1; y<=x; y++)
			{
				System.out.print(y+"*"+x+"="+x*y+"\t");
			}
			System.out.println();
		}

		System.out.println("----------------------");

		for(int x=1; x<=9; x++)
		{
			for(int y=1; y<=x; y++)
			{
				System.out.print(y+"*"+x+"="+x*y+"\t");
			}
			System.out.println();
		}
		*/
		printXX(3);

		System.out.println("----------------------");

		printXX(9);

		System.out.println("----------------------");
		
		//练习:比较三个数的大小,并返回最大的值。
		System.out.println(max2(10,20,15));
		
	}

	/*
	需求:求两个整数的和

	明确:
		1:明确结果 整数,int
		2:明确参数 加数和被加数不明确,也就是未知的,需要定义两个变量,而且都是int类型。
	*/
	public static int sum(int a,int b)
	{
		return a + b;
	}

	/*
	需求:比较两个数的大小,返回较大的值。

	明确:
		1:明确结果 int
		2:明确参数 两个未知内容
	*/
	public static int max(int a,int b)
	{
		/*
		int z;
		if(a>b)
		{
			z = a;
		}
		else
		{
			z = b;
		}
		return z;
		*/
		
		/*
		if(a>b)
		{
			return a;
		}
		else 
		{
			return b;
		}
		*/
		
		//int z = a>b?a:b;
		//return z;

		return a>b?a:b;
	}

	/*
	需求:打印xx乘法表(xx在1-9之间)

	明确:
		1:明确结果 直接在控制台输出 所以返回类型 void
		2:明确参数 xx乘法表,所以声明一个变量num
	*/
	public static void printXX(int num)
	{
		for(int x=1; x<=num; x++)
		{
			for(int y=1; y<=x; y++)
			{
				System.out.print(y+"*"+x+"="+x*y+"\t");
			}
			System.out.println();
		}
	}

	/*
	需求:比较三个数的大小,并返回最大的值。

	明确:
		1:int
		2:几个未知数:3个
	*/
	public static int max2(int a,int b,int c)
	{
		/*
		if(a>b)
		{
			if(a>c)
			{
				return a;			
			}
			else
			{
				return c;
			}
		}
		else
		{
			if(b>c)
			{
				return b;			
			}
			else
			{
				return c;
			}
		}*/

		int temp = a>b?a:b;
		return temp>c?temp:c;
		//不推荐,阅读性较差。 return a>b?(a>c?a:c):(b>c?b:c);
	}
}

<think>好的,我现在需要帮助用户解决关于PHP中全局变量修改的问题。用户给出的代码示例是: $num = 10; function test() { global $num; $num = 20; } test(); echo $num; 用户想知道执行这段代码后,$num的值是什么。根据之前的对话和我提供的引用资料,我需要详细分析这个过程。 首先,回忆用户提供的引用内容。引用[1]提到,函数内部默认使用局部变量,但通过global关键字可以引用全局变量。引用[4]中的例子显示,使用global后,函数内修改的变量会影响全局作用域。用户之前的回答也解释了使用global或$GLOBALS来修改全局变量的方法。 现在,我需要逐步解析代码的执行流程。初始时,$num在全局作用域被赋值为10。然后定义函数test(),内部使用global声明$num,这会将其指向全局变量。调用test()时,$num被修改为20。最后echo $num会输出20。 需要注意是否有其他可能影响结果的因素,比如变量作用域冲突或者错误使用global关键字。但根据代码结构,没有问题,global正确声明,所以最终结果应该是20。 需要确保回答中引用相关参考资料,比如引用[1]和[4],说明global的作用机制。同时,对比不使用global的情况,如引用[1]中的示例,说明为何此时修改的是局部变量。此外,可以提到$GLOBALS作为替代方法,但用户代码中使用的是global,所以重点放在这里。 可能还需要提醒用户关于全局变量的使用注意事项,比如避免滥用,引用[2]提到的作用域管理的重要性,以及引用[4]中的例子说明正确使用global后的结果变化。这些都可以加强回答的全面性。 总结,代码中的global正确将函数内的$num指向全局变量,因此修改后全局变量变为20,最终输出20。需要确保回答结构清晰,步骤明确,并引用相关资料支持结论。</think>### 分步解析代码中的变量值变化 根据您提供的代码和PHP全局变量作用域规则,**最终`$num`的值为`20`**。以下是逐步解析过程: --- #### 1. **全局变量初始化** ```php $num = 10; // 全局作用域中定义变量$num,初始值为10 ``` --- #### 2. **函数内通过`global`声明全局变量** ```php function test() { global $num; // 显式声明使用全局变量$num的引用 $num = 20; // 修改全局变量$num的值 } ``` - **关键机制**:`global $num`将函数内的`$num`与全局作用域的`$num`绑定为同一变量[^1][^4]。 - 此时函数内的赋值操作直接影响全局变量。 --- #### 3. **调用函数`test()`** ```php test(); // 执行函数后,全局$num被修改为20 ``` --- #### 4. **输出结果** ```php echo $num; // 输出全局变量$num的值,结果为20 ``` --- ### 关键原理总结 | 步骤 | 变量作用域 | 值 | 说明 | |--------------|--------------|------|----------------------------------------------------------------------| | 初始赋值 | 全局作用域 | 10 | 全局变量$num在函数外定义 | | 函数内修改 | 全局作用域 | 20 | 通过`global`关键字绑定全局变量,直接修改其值[^1][^4] | | 最终输出 | 全局作用域 | 20 | 函数调用后全局变量已被更新 | --- ### 对比未使用`global`的情况(引用[1]示例) 若代码中**未使用`global`**,则函数内操作的是局部变量: ```php $num = 10; function test() { $num = 20; // 局部变量,与全局$num无关 } test(); echo $num; // 输出10(全局变量未被修改) ``` --- ### 扩展:通过`$GLOBALS`实现相同效果 ```php $num = 10; function test() { $GLOBALS['num'] = 20; // 直接操作超全局数组修改全局变量 } test(); echo $num; // 输出20 ``` - 无需`global`声明,直接通过超全局数组修改全局变量[^3]。 --- ### 注意事项(引用[2][4]) 1. **避免滥用全局变量**:频繁使用`global`或`$GLOBALS`可能导致代码耦合性增加。 2. **作用域清晰性**:在函数中修改变量时,需明确声明作用域,防止意外覆盖。 --- --相关问题-- 1. 如何避免PHP中全局变量被意外修改? 2. `global`关键字与`$GLOBALS`数组在实现原理上有何区别? 3. 静态变量(`static $var`)与全局变量的生命周期有何不同?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值