test_pet_skill_fix.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. require_once 'vendor/autoload.php';
  3. use App\Module\Pet\Dtos\PetLifeSkillDto;
  4. use App\Module\Game\Dtos\PetStatusTempDto;
  5. echo "开始测试宠物技能修复...\n";
  6. // 测试1: 创建PetLifeSkillDto对象
  7. echo "\n=== 测试1: 创建PetLifeSkillDto对象 ===\n";
  8. $lifeSkill1 = new PetLifeSkillDto();
  9. $lifeSkill1->skillId = 1;
  10. $lifeSkill1->canuse = true;
  11. $lifeSkill1->curnum = 0;
  12. $lifeSkill1->maxnum = 300;
  13. $lifeSkill2 = new PetLifeSkillDto();
  14. $lifeSkill2->skillId = 2;
  15. $lifeSkill2->canuse = false;
  16. $lifeSkill2->curnum = 150;
  17. $lifeSkill2->maxnum = 300;
  18. echo "创建了2个PetLifeSkillDto对象\n";
  19. echo "技能1: skillId={$lifeSkill1->skillId}, canuse=" . ($lifeSkill1->canuse ? 'true' : 'false') . "\n";
  20. echo "技能2: skillId={$lifeSkill2->skillId}, canuse=" . ($lifeSkill2->canuse ? 'true' : 'false') . "\n";
  21. // 测试2: 创建PetStatusTempDto对象并设置lifeSkills
  22. echo "\n=== 测试2: 创建PetStatusTempDto对象 ===\n";
  23. $petTempDto = new PetStatusTempDto();
  24. $petTempDto->id = 1;
  25. $petTempDto->name = '测试宠物';
  26. $petTempDto->lifeSkills = [$lifeSkill1, $lifeSkill2];
  27. echo "创建了PetStatusTempDto对象\n";
  28. echo "宠物ID: {$petTempDto->id}\n";
  29. echo "宠物名称: {$petTempDto->name}\n";
  30. echo "生活技能数量: " . count($petTempDto->lifeSkills) . "\n";
  31. foreach ($petTempDto->lifeSkills as $index => $skill) {
  32. echo "技能{$index}: " . get_class($skill) . ", skillId={$skill->skillId}\n";
  33. }
  34. // 测试3: 模拟缓存数据并使用fromCache恢复
  35. echo "\n=== 测试3: 测试fromCache方法 ===\n";
  36. $cachedData = [
  37. 1 => [
  38. 'id' => 1,
  39. 'name' => '测试宠物',
  40. 'life_skills' => [
  41. [
  42. 'skill_id' => 1,
  43. 'canuse' => true,
  44. 'curnum' => 0,
  45. 'maxnum' => 300
  46. ],
  47. [
  48. 'skill_id' => 2,
  49. 'canuse' => false,
  50. 'curnum' => 150,
  51. 'maxnum' => 300
  52. ]
  53. ]
  54. ]
  55. ];
  56. echo "模拟缓存数据:\n";
  57. print_r($cachedData);
  58. $result = PetStatusTempDto::fromCache($cachedData);
  59. echo "\n使用fromCache恢复数据:\n";
  60. echo "恢复的数据数量: " . count($result) . "\n";
  61. if (isset($result[1])) {
  62. $recoveredPet = $result[1];
  63. echo "恢复的宠物类型: " . get_class($recoveredPet) . "\n";
  64. echo "恢复的宠物ID: {$recoveredPet->id}\n";
  65. echo "恢复的宠物名称: {$recoveredPet->name}\n";
  66. echo "恢复的生活技能数量: " . count($recoveredPet->lifeSkills) . "\n";
  67. foreach ($recoveredPet->lifeSkills as $index => $skill) {
  68. echo "恢复的技能{$index}: " . get_class($skill) . ", skillId={$skill->skillId}, canuse=" . ($skill->canuse ? 'true' : 'false') . "\n";
  69. }
  70. // 测试4: 验证访问skillId属性不会出错
  71. echo "\n=== 测试4: 验证访问skillId属性 ===\n";
  72. try {
  73. foreach ($recoveredPet->lifeSkills as $skill) {
  74. echo "访问技能skillId: {$skill->skillId} - 成功\n";
  75. }
  76. echo "所有技能的skillId属性访问成功!\n";
  77. } catch (Exception $e) {
  78. echo "错误: " . $e->getMessage() . "\n";
  79. }
  80. } else {
  81. echo "错误: 无法恢复宠物数据\n";
  82. }
  83. echo "\n测试完成!\n";